protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); foreach (var entityType in modelBuilder.Model.GetEntityTypes()) { var type = entityType.ClrType; var entityBuilder = modelBuilder.Entity(type); OnEntityBuild(entityBuilder); var isVirtualDeleted = (typeof(IVirtualDeletedEntity).IsAssignableFrom(type)); var isTenant = (typeof(IVirtualDeletedEntity).IsAssignableFrom(type)); if (isVirtualDeleted && isTenant) { SetGlobalFilterMethod.MakeGenericMethod(type).Invoke(this, new[] { modelBuilder }); } else { if (isVirtualDeleted) { SetVirtualDeletedFilterMethod.MakeGenericMethod(type).Invoke(this, new[] { modelBuilder }); } if (isTenant) { SetTenantFilterMethod.MakeGenericMethod(type).Invoke(this, new[] { modelBuilder }); } } } foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys())) { relationship.DeleteBehavior = typeof(IValueEntity).IsAssignableFrom(relationship.DeclaringEntityType.ClrType) ? DeleteBehavior.Cascade : DeleteBehavior.Restrict; } }
public static void SetTenantFilter(this ModelBuilder modelBuilder, Type entityType, int?tenantId) { SetTenantFilterMethod.MakeGenericMethod(entityType) .Invoke(null, new object[] { modelBuilder, tenantId }); }