Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Entity framework 实体框架核心上下文中Fk的命名_Entity Framework_Foreign Keys_Entity Framework Core_Mapping_Naming - Fatal编程技术网

Entity framework 实体框架核心上下文中Fk的命名

Entity framework 实体框架核心上下文中Fk的命名,entity-framework,foreign-keys,entity-framework-core,mapping,naming,Entity Framework,Foreign Keys,Entity Framework Core,Mapping,Naming,我正在从事EF core 2.2 rest api项目。 我使用dbfirst方法和“scaffoldbcontext”命令创建了模型和上下文 模型和上下文可以工作,但我注意到在上下文代码中有外键的显式名称: modelBuilder.Entity<TrackingPoints>(entity => { entity.HasKey(e => e.IdPosition); entity.ToTable("myTable");

我正在从事EF core 2.2 rest api项目。 我使用dbfirst方法和“scaffoldbcontext”命令创建了模型和上下文

模型和上下文可以工作,但我注意到在上下文代码中有外键的显式名称:

    modelBuilder.Entity<TrackingPoints>(entity =>
    {
        entity.HasKey(e => e.IdPosition);

        entity.ToTable("myTable");

        entity.Property(e => e.CaseId).HasColumnName("CaseId");

        entity.HasOne(d => d.IGeoPosition)
            .WithMany(p => p.TrackingPoints)
            .HasForeignKey(d => d.IPositionId)
            .OnDelete(DeleteBehavior.ClientSetNull)
            .HasConstraintName("FK__Track__iGeoP__278EDA44");
    });
modelBuilder.Entity(Entity=>
{
entity.HasKey(e=>e.IdPosition);
实体。ToTable(“myTable”);
Property(e=>e.CaseId).HasColumnName(“CaseId”);
entity.HasOne(d=>d.IGeoPosition)
.具有多个(p=>p.跟踪点)
.HasForeignKey(d=>d.IPositionId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HASSCONSTRAINTNAME(“FK_u_轨道__iGeoP__278EDA44”);
});
(实际表有更多字段,但我保持简短)

我关心的是FK名称(HasConstraintName)。 实际上,这段代码包含有关表之间数据关系的信息,但它也有一个FK约束的显式名称

我注意到,在这个数据库的不同实例中(dev,preproduction…),同一个约束有不同的名称


我想知道我是否必须在db的所有实例上为FK约束赋予相同的名称,或者尽管约束的命名不匹配,映射是否能够完美地工作。它在dev环境中工作,并且FK名称与模型中的名称匹配。在不同的环境中,第一次测试是可以的,但我不知道命名问题是否会产生一些模糊和难以发现的副作用。

约束/索引名称是物理关系数据库映射的一部分,并且仅在迁移需要删除约束的情况下,对于代码优先迁移非常重要。如果名称不匹配,它将无法删除它,整个迁移可能会失败

如果在数据库更改时继续使用数据库优先方法重新构建(或使用某些外部工具更新)上下文,则约束/索引名称不会对EF核心行为产生任何影响

如果将来某个时候您决定切换到代码优先迁移,则会出现问题。因此,尽管对当前工作流不是很必要,但在所有数据库中保持名称相同会更安全