如何解决.NET Core Entity Framework 将子表链接到属性
这是我继承的现有 .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 missing”。
我在代码的任何位置都找不到列 SupportContractStatusId
和表 SupportContractStatus
之间的任何链接,也没有提及外键。
DbContext
中也没有链接。
实体框架是否采用此命名约定?框架如何知道外键?
解决方法
是的,EF 默认的命名约定是基于类名,而不是属性名。它将查找 ClassNameId 或 ClassName_Id。您可以通过注释或配置链接 FK。
即
public int ContractStatusId { get; set; }
[ForeignKey("ContractStatusId")]
public virtual SupportContractStatus ContractStatus { get; set; }
配置是通过 IEntityTypeConfiguration
实现或通过在 DbContext 中实现 OnModelCreating
方法并在模型构建器中配置关系来完成的。对于偶尔偏离惯例的情况,属性方法通常可以涵盖所有内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。