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; } }
/// <summary> /// On model creating. /// </summary> /// <param name="builder">builder.</param> protected override void OnModelCreating(ModelBuilder builder) { // Needed for Identity models configuration base.OnModelCreating(builder); 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; } builder.Entity <Comment>() .HasOne(p => p.Post) .WithMany(t => t.Comments) .OnDelete(DeleteBehavior.Cascade); builder.Entity <Profile>() .HasOne(p => p.User) .WithOne(t => t.Profile) .OnDelete(DeleteBehavior.Cascade); builder.Entity <ApplicationUser>() .HasMany(p => p.Posts) .WithOne(t => t.Author) .HasForeignKey(x => x.AuthorId); builder.Entity <ApplicationUser>() .HasMany(p => p.SentMessages) .WithOne(t => t.Sender) .HasForeignKey(x => x.SenderId); builder.Entity <ApplicationUser>() .HasMany(p => p.ReceivedMessages) .WithOne(t => t.Recipient) .HasForeignKey(x => x.RecipientId); builder.Entity <Post>() .HasOne(bc => bc.Category) .WithMany(b => b.Posts) .HasForeignKey(bc => bc.CategoryId) .OnDelete(DeleteBehavior.Cascade); builder.Entity <PostsTagsRelations>() .HasKey(x => new { x.PostId, x.TagId }); builder.Entity <PostsTagsRelations>() .HasOne(bc => bc.Tag) .WithMany(b => b.PostsTagsRelations) .HasForeignKey(bc => bc.TagId) .OnDelete(DeleteBehavior.Cascade); builder.Entity <PostsTagsRelations>() .HasOne(bc => bc.Post) .WithMany(c => c.PostsTagsRelations) .HasForeignKey(bc => bc.PostId) .OnDelete(DeleteBehavior.Cascade); }