NET核心实体框架将子表链接到属性



这是一个现有的。NET Core 3.1项目。

我有一个类引用了数据库表

public class SupportContract
{
public int Id { get; set; }
public DateTime StartDate { get; set; }
public int SupportContractStatusId { get; set; }
public virtual SupportContractStatus SupportContractStatus { get; set; }
}

以及具有外键的子表

public class SupportContractStatus
{
public int Id { get; set; }
public string SupportContractStatusName { get; set; }
}

这很好,我可以得到

supportContract.SupportContractStatus.SupportContractStatusName 

但如果我在C#和数据库中将SupportContractStatusId重命名为ContractStatusId;SupportContractStatusId丢失";。

我在代码中的任何地方都找不到列SupportContractStatusId和表SupportContractStatus之间的任何链接,也没有提到外键。

DbContext中也没有链接。

实体框架是否采用了这种命名约定?框架如何知道外键?

是的,EF默认期望的命名约定基于类名,而不是属性名。它将查找ClassNameId或ClassName_Id。可以通过注释或配置链接FK。

public int ContractStatusId { get; set; }
[ForeignKey("ContractStatusId")]
public virtual SupportContractStatus ContractStatus { get; set; }

配置是通过IEntityTypeConfiguration实现或通过在DbContext中实现OnModelCreating方法并在modelBuilder中配置关系来完成的。对于偶尔偏离惯例的情况,属性方法通常可以涵盖所有内容。

相关内容

  • 没有找到相关文章

最新更新