如何更改实体框架核心中的外键后缀



在采用代码优先方法的EF Core中,默认情况下,引用另一个实体的列具有Id后缀,例如PersonId

有可能吗?如果有,怎么做将其更改为_id,那么更改为person_id

在您想要的名称下显式创建外键-在您的情况下是Parent_Id。保留navigation propertyforeign key属性。

public int Parent_ID { get; set; }
public virtual Parent Parent { get; set; }

使用.HasForeignKey()映射外键关系。类似于

builder.HasOne(d => d.Prop)
.WithMany(p => p.NavigationProp)
.HasForeignKey(d => d.ForeignKeyProp)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_ConstraintName");

如果你喜欢data annotation,你也可以使用

[Column("Parent_ID")]
public int ParentID { get; set; }

要添加到WisdomSeeker的答案中,可以使用[ForeignKey]注释指向FK.的阴影属性

给定一个类似课程的课程,并为教师提供个人参考:

public class Course
{
[Key]
public int Id {get; set;}
// other fields.
[ForeignKey("person_id")]
public virtual Person Teacher { get; set; }
}

上述备选方案为:

[ForeignKey("Teacher")]
public int person_id { get; set; } // Not recommended naming convention in code.
public virtual Person Teacher { get; set; }

[Column("person_id"), ForeignKey("Teacher")]
public int TeacherId { get; set; }
public virtual Person Teacher { get; set; }

我通常避免在类中添加FK字段,因为这会导致老师分配给课程的两个真相来源。你有课程。教师ID和课程。Teacher.Id,在SaveChanges之前和之后更新时可能有所不同。阴影属性有助于避免混淆并保持数据更新的一致性。

在Db-First实现中,使用[Column]是很常见的,在这种实现中,您希望对要在代码中使用的属性使用C#命名约定,但要遵守数据库中现有/所需的Db命名约定。我通常不建议在C#类中使用DB命名约定。

相关内容

  • 没有找到相关文章

最新更新