Browse Source

Created IEfCoreDbContext

pull/189/head
Halil İbrahim Kalkan 9 years ago
parent
commit
9ed202e0b7
  1. 2
      src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
  2. 14
      src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs
  3. 4
      src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs
  4. 12
      src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/IMultiTenancyDbContext.cs
  5. 25
      src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContext.cs
  6. 31
      src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContextModelCreatingExtensions.cs

2
src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs

@ -17,7 +17,7 @@ using Volo.Abp.Uow;
namespace Volo.Abp.EntityFrameworkCore namespace Volo.Abp.EntityFrameworkCore
{ {
public abstract class AbpDbContext<TDbContext> : DbContext public abstract class AbpDbContext<TDbContext> : DbContext, IEfCoreDbContext
where TDbContext : DbContext where TDbContext : DbContext
{ {
public Guid? CurrentTenantId => CurrentTenant?.Id; public Guid? CurrentTenantId => CurrentTenant?.Id;

14
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<T> Set<T>()
where T: class;
}
}

4
src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver.cs → src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs

@ -1,9 +1,9 @@
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Data.MultiTenancy namespace Volo.Abp.MultiTenancy
{ {
[Dependency(ReplaceServices = true)] [Dependency(ReplaceServices = true)]
public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolver public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolver

12
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<Tenant> Tenants { get; set; }
DbSet<TenantConnectionString> TenantConnectionStrings { get; set; }
}
}

25
src/Volo.Abp.MultiTenancy.EntityFrameworkCore/Volo/Abp/MultiTenancy/EntityFrameworkCore/MultiTenancyDbContext.cs

@ -3,7 +3,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace Volo.Abp.MultiTenancy.EntityFrameworkCore namespace Volo.Abp.MultiTenancy.EntityFrameworkCore
{ {
public class MultiTenancyDbContext : AbpDbContext<MultiTenancyDbContext> public class MultiTenancyDbContext : AbpDbContext<MultiTenancyDbContext>, IMultiTenancyDbContext
{ {
public DbSet<Tenant> Tenants { get; set; } public DbSet<Tenant> Tenants { get; set; }
@ -18,28 +18,7 @@ namespace Volo.Abp.MultiTenancy.EntityFrameworkCore
{ {
base.OnModelCreating(builder); base.OnModelCreating(builder);
//TODO: Split configuration to dedicated classes (probably a resuable extension method) this.ConfigureAbpMultiTenancy(builder);
builder.Entity<Tenant>(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<TenantConnectionString>(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);
});
} }
} }
} }

31
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<Tenant>(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<TenantConnectionString>(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);
});
}
}
}
Loading…
Cancel
Save