更改模型时重新创建迁移

时间:2018-08-29 16:03:32

标签: 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>("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的使用更加丰富。

我花了大约一个小时的时间在这里阅读了几个类似的问题,但是我没有找到具体问题的答案。

1 个答案:

答案 0 :(得分:0)

您不必使用迁移。这只是确保EF模型和数据库架构同步的一种便捷方法。使它们保持同步的其他方法:

  • 每次更改数据库架构时,对模型(Scaffold-DbContext或dotnet ef dbcontext scaffold)进行反向工程。
  • 同时手动更改EF模型和数据库架构。