diff --git a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 07bc3f6760..4b2edcc6dc 100644 --- a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -17,7 +17,7 @@ using Volo.Abp.Uow; namespace Volo.Abp.EntityFrameworkCore { - public abstract class AbpDbContext : DbContext + public abstract class AbpDbContext : DbContext, IEfCoreDbContext where TDbContext : DbContext { public Guid? CurrentTenantId => CurrentTenant?.Id; diff --git a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs new file mode 100644 index 0000000000..880d4112e3 --- /dev/null +++ b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs @@ -0,0 +1,14 @@ +using Microsoft.EntityFrameworkCore; + +namespace Volo.Abp.EntityFrameworkCore +{ + public interface IEfCoreDbContext + { + int SaveChanges(); + + int SaveChanges(bool acceptAllChangesOnSuccess); + + DbSet Set() + where T: class; + } +} diff --git a/src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver.cs b/src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs similarity index 96% rename from src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver.cs rename to src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs index 659f9cf9d1..8eebb45ef4 100644 --- a/src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver.cs +++ b/src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs @@ -1,9 +1,9 @@ using System.Collections.Generic; using Microsoft.Extensions.Options; +using Volo.Abp.Data; using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; -namespace Volo.Abp.Data.MultiTenancy +namespace Volo.Abp.MultiTenancy { [Dependency(ReplaceServices = true)] public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolver diff --git a/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/IMultiTenancyDbContext.cs b/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/IMultiTenancyDbContext.cs new file mode 100644 index 0000000000..28cf9cd9b7 --- /dev/null +++ b/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/IMultiTenancyDbContext.cs @@ -0,0 +1,12 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; + +namespace Volo.Abp.MultiTenancy.EntityFrameworkCore +{ + public interface IMultiTenancyDbContext : IEfCoreDbContext + { + DbSet Tenants { get; set; } + + DbSet TenantConnectionStrings { get; set; } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContext.cs b/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContext.cs index 0dc023ad9f..8648083e31 100644 --- a/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContext.cs +++ b/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContext.cs @@ -3,7 +3,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Volo.Abp.MultiTenancy.EntityFrameworkCore { - public class MultiTenancyDbContext : AbpDbContext + public class MultiTenancyDbContext : AbpDbContext, IMultiTenancyDbContext { public DbSet Tenants { get; set; } @@ -18,28 +18,7 @@ namespace Volo.Abp.MultiTenancy.EntityFrameworkCore { base.OnModelCreating(builder); - //TODO: Split configuration to dedicated classes (probably a resuable extension method) - - builder.Entity(b => - { - b.ToTable("MtTenants"); //TODO: Make all table and schema names changeable - - b.Property(t => t.Name).IsRequired().HasMaxLength(TenantConsts.MaxNameLength); - - b.HasMany(u => u.ConnectionStrings).WithOne().HasForeignKey(uc => uc.TenantId).IsRequired(); - - b.HasIndex(u => u.Name); - }); - - builder.Entity(b => - { - b.ToTable("MtTenantConnectionStrings"); - - b.Property(cs => cs.Name).IsRequired().HasMaxLength(TenantConnectionStringConsts.MaxNameLength); - b.Property(cs => cs.Value).IsRequired().HasMaxLength(TenantConnectionStringConsts.MaxValueLength); - - b.HasIndex(cs => cs.TenantId); - }); + this.ConfigureAbpMultiTenancy(builder); } } } diff --git a/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContextModelCreatingExtensions.cs b/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContextModelCreatingExtensions.cs new file mode 100644 index 0000000000..c61b9368a4 --- /dev/null +++ b/src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContextModelCreatingExtensions.cs @@ -0,0 +1,31 @@ +using Microsoft.EntityFrameworkCore; + +namespace Volo.Abp.MultiTenancy.EntityFrameworkCore +{ + public static class MultiTenancyDbContextModelCreatingExtensions + { + public static void ConfigureAbpMultiTenancy(this IMultiTenancyDbContext dbContext, ModelBuilder builder) + { + builder.Entity(b => + { + b.ToTable("MtTenants"); //TODO: Make all table and schema names changeable + + b.Property(t => t.Name).IsRequired().HasMaxLength(TenantConsts.MaxNameLength); + + b.HasMany(u => u.ConnectionStrings).WithOne().HasForeignKey(uc => uc.TenantId).IsRequired(); + + b.HasIndex(u => u.Name); + }); + + builder.Entity(b => + { + b.ToTable("MtTenantConnectionStrings"); + + b.Property(cs => cs.Name).IsRequired().HasMaxLength(TenantConnectionStringConsts.MaxNameLength); + b.Property(cs => cs.Value).IsRequired().HasMaxLength(TenantConnectionStringConsts.MaxValueLength); + + b.HasIndex(cs => cs.TenantId); + }); + } + } +} \ No newline at end of file