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

时间:2012-09-17 16:37:49

标签: 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; }
}

这是我的表:

create table Entities(
    EntityId bigint not null identity(1, 1),
    Name nvarchar(64) not null,
    ParentEntityId bigint null
)

ParentEntityId是EntityId的外键。

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

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

[Column("TryPickThisName")]
public virtual int? ParentEntityId { get; set; }

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

1 个答案:

答案 0 :(得分: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; }
}

创建此数据库: enter image description here