C# 更改模型时重新创建迁移
最近我花了很多时间编写ADO.NET代码。我已经回到EF Core,现在查看以下配置:C# 更改模型时重新创建迁移,c#,ef-core-2.1,C#,Ef Core 2.1,最近我花了很多时间编写ADO.NET代码。我已经回到EF Core,现在查看以下配置: modelBuilder.Entity<PersonSport>().HasKey(sc => new { sc.PersonId, sc.SportId }); modelBuilder.Entity<Sport>() .ToTable("Sport") .HasDiscriminator<string&
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);
modelBuilder.Entity().HasKey(sc=>new{sc.PersonId,sc.SportId});
modelBuilder.Entity()
.ToTable(“运动”)
.HasDiscriminator(“SportType”)
.HasValue(“足球”)
.HasValue(“运行”);
modelBuilder.Entity()
.HasOne(sc=>sc.Person)
.WithMany(s=>s.PersonSport)
.HasForeignKey(sc=>sc.PersonId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity()
.HasOne(sc=>sc.Sport)
.WithMany(s=>s.PersonSport)
.HasForeignKey(sc=>sc.SportId)
.OnDelete(DeleteBehavior.Cascade);
var navigation=modelBuilder.Entity().Metadata.FindNavigation(nameof(ConsoleApp1.Person.PersonSport));
navigation.SetPropertyAccessMode(PropertyAccessMode.Field);
如果我删除一个人或一项运动,则会删除相应的个人运动记录,因为DeleteBehavior.Cascade设置为OnDelete。如果要将其更改为DeleteBehavior.Restrict,则必须重新创建迁移并更新数据库。为什么?我之所以问为什么,是因为每次启动程序时都会运行PersonPortContext.OnModelCreating
我意识到这是一个非常简单的问题。我已经离开ORM一段时间了,对ADO.NET有了更多的经验
我花了一个小时左右的时间在这里阅读了几个类似的问题,但是我还没有找到我具体问题的答案。您不必使用迁移。这只是一种确保EF模型和数据库模式同步的方便方法。其他一些保持同步的方法:
- 每次更改数据库架构时,对模型(Scaffold DbContext或
)进行反向工程dotnet ef DbContext Scaffold
- 同时手动更改EF模型和数据库架构