Entity framework 实体框架核心上下文中Fk的命名
我正在从事EF core 2.2 rest api项目。 我使用dbfirst方法和“scaffoldbcontext”命令创建了模型和上下文 模型和上下文可以工作,但我注意到在上下文代码中有外键的显式名称: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");
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核心行为产生任何影响 如果将来某个时候您决定切换到代码优先迁移,则会出现问题。因此,尽管对当前工作流不是很必要,但在所有数据库中保持名称相同会更安全