Exemple #1
0
        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 });
 }