protected override void OnModelCreating(ModelBuilder builder) { // Needed for Identity models configuration base.OnModelCreating(builder); this.ConfigureUserIdentityRelations(builder); EntityIndexesConfiguration.Configure(builder); var entityTypes = builder.Model.GetEntityTypes().ToList(); // Set global query filter for not deleted entities only var deletableEntityTypes = entityTypes .Where(et => et.ClrType != null && typeof(IDeletableEntity).IsAssignableFrom(et.ClrType)); foreach (var deletableEntityType in deletableEntityTypes) { var method = SetIsDeletedQueryFilterMethod.MakeGenericMethod(deletableEntityType.ClrType); method.Invoke(null, new object[] { builder }); } // Disable cascade delete var foreignKeys = entityTypes .SelectMany(e => e.GetForeignKeys().Where(f => f.DeleteBehavior == DeleteBehavior.Cascade)); foreach (var foreignKey in foreignKeys) { foreignKey.DeleteBehavior = DeleteBehavior.Restrict; } }
protected override void OnModelCreating(ModelBuilder builder) { // Needed for Identity models configuration base.OnModelCreating(builder); this.ConfigureUserIdentityRelations(builder); EntityIndexesConfiguration.Configure(builder); var entityTypes = builder.Model.GetEntityTypes().ToList(); // Set global query filter for not deleted entities only var deletableEntityTypes = entityTypes .Where(et => et.ClrType != null && typeof(IDeletableEntity).IsAssignableFrom(et.ClrType)); foreach (var deletableEntityType in deletableEntityTypes) { var method = SetIsDeletedQueryFilterMethod.MakeGenericMethod(deletableEntityType.ClrType); method.Invoke(null, new object[] { builder }); } // Disable cascade delete var foreignKeys = entityTypes .SelectMany(e => e.GetForeignKeys().Where(f => f.DeleteBehavior == DeleteBehavior.Cascade)); foreach (var foreignKey in foreignKeys) { foreignKey.DeleteBehavior = DeleteBehavior.Restrict; } // My Models builder.Entity<Manager>() .HasOne(m => m.Team) .WithOne(t => t.Manager) .HasForeignKey<Team>(c => c.ManagerId); builder.Entity<ApplicationUser>() .HasOne(u => u.Manager) .WithOne(t => t.User) .HasForeignKey<Manager>(c => c.UserId); builder.Entity<League>().HasOne<Manager>(l => l.Creator).WithMany(c => c.MyLeagues); builder.Entity<League>().HasMany<Manager>(m => m.Participants); builder.Entity<Manager>().HasMany<League>(l => l.Leagues); }