Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改模型时重新创建迁移_C#_Ef Core 2.1 - Fatal编程技术网

C# 更改模型时重新创建迁移

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&

最近我花了很多时间编写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);
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模型和数据库架构