实体框架:代码优先 - 列映射

Est*_*ban 2 entity-framework ef-code-first

我有这样的模型:

public class Entity
{
    [Key, Required]
    public virtual long EntityId { get; set; }
    [Required]
    public virtual string Name { get; set; }
    public virtual long? ParentEntityId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我的表:

create table Entities(
    EntityId bigint not null identity(1, 1),
    Name nvarchar(64) not null,
    ParentEntityId bigint null
)
Run Code Online (Sandbox Code Playgroud)

ParentEntityId是EntityId的外键.

当我尝试创建一个Entity实体时,这是我得到的异常: Invalid column name 'ParentEntity_EntityId'.

我不知道为什么EF会选择该特定列的约定,但如果我这样做:

[Column("TryPickThisName")]
public virtual int? ParentEntityId { get; set; }
Run Code Online (Sandbox Code Playgroud)

使用"TryPickThisName"列名称显示相同的错误.最后,如果我正确地写了列名删除属性,它将显示原始错误消息.

Mar*_*eta 5

你把部分模型留下了吗?

我认为正在发生的事情是你想要创建一个自引用表,如果它有ParentEntity,Entity可以选择引用它自己.

发生了什么是EF正在创建ParentEntity_EntityId,因为您没有将FK属性显式映射到导航属性.添加ForeignKey数据注释将更正此问题.

public class Entity
{
    [Key, Required]
    public virtual long EntityId { get; set; }
    [Required]
    public virtual string Name { get; set; }

    [ForeignKey("ParentEntity")]
    public virtual long? ParentEntityId { get; set; }
    public virtual Entity ParentEntity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

创建此数据库: 在此输入图像描述