我有一个这样的模型:
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”列名称显示相同的错误。最后,如果我正确地写了列名或,请删除该属性,它将显示原始错误消息。
答案 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; }
}
创建此数据库: