2

我有一个这样的模型:

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”列名显示相同的错误。最后,如果我正确写入列名删除属性,它将显示原始错误消息。

4

1 回答 1

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; }
}

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

于 2012-09-17T16:47:50.623 回答