微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.NET Core Entity Framework 将子表链接到属性

如何解决.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 举报,一经查实,本站将立刻删除。