最近我花了很多时间编写ADO.NET代码。我已经回到EF Core,现在在看下面的配置:
modelBuilder.Entity<PersonSport>().HasKey(sc => new { sc.PersonId, sc.SportId });
modelBuilder.Entity<Sport>()
.ToTable("Sport")
.HasDiscriminator<string>("SportType")
.HasValue<Football>("Football")
.HasValue<Running>("Running");
modelBuilder.Entity<PersonSport>()
.HasOne<Person>(sc => sc.Person)
.WithMany(s => s.PersonSport)
.HasForeignKey(sc => sc.PersonId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<PersonSport>()
.HasOne<Sport>(sc => sc.Sport)
.WithMany(s => s.PersonSport)
.HasForeignKey(sc => sc.SportId)
.OnDelete(DeleteBehavior.Cascade);
var navigation = modelBuilder.Entity<Person>().Metadata.FindNavigation(nameof(ConsoleApp1.Person.PersonSport));
navigation.SetPropertyAccessMode(PropertyAccessMode.Field);
如果删除个人或运动,则会删除适当的PersonSport记录,因为DeleteBehaviour.Cascade设置为OnDelete。如果要将其更改为DeleteBehaviour.Restrict,则必须重新创建迁移并更新数据库。为什么?我问为什么的原因是因为PersonSportContext.OnModelCreating每次我启动程序时都会运行。
我意识到这是一个非常简单的问题。我离开ORM已有一段时间了,对ADO.NET的使用更加丰富。
我花了大约一个小时的时间在这里阅读了几个类似的问题,但是我没有找到具体问题的答案。
答案 0 :(得分:0)
您不必使用迁移。这只是确保EF模型和数据库架构同步的一种便捷方法。使它们保持同步的其他方法:
dotnet ef dbcontext scaffold
)进行反向工程。