我正在尝试在Entity Framework v6代码优先创建一个自引用组织表 - 我似乎无法做到正确...(到目前为止,我一直使用EF 4.0可视化设计器)。 / p>
我有这个类(对应于SQL Server表):
[Table("Organisation")]
public partial class Organisation
{
public int OrganisationId { get; set; }
public int? ParentOrgId { get; set; }
[Required]
[StringLength(100)]
public string Name { get; set; }
[ForeignKey("ParentOrgId")]
public virtual Organisation Parent { get; set; }
}
非常标准的东西 - 这是我的DbContext
派生类,它应该设置这个自引用层次结构:
public partial class HierarchyCtx : DbContext
{
public HierarchyCtx() : base("name=HierarchyCtx")
{
}
public virtual DbSet<Organisation> Organisation { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Organisation>()
.Property(e => e.Name)
.IsUnicode(false);
modelBuilder.Entity<Organisation>()
.HasOptional(e => e.Parent)
.WithMany()
.HasForeignKey(m => m.ParentOrgId)
.WillCascadeOnDelete(false);
}
}
现在我在SQL Server表中添加了几行,但在尝试加载这些条目时,出现错误:
System.Data.SqlClient.SqlException:无效的列名称'Discriminator' 列名称“Discriminator”无效。
列名称“Discriminator”无效。
列名称'ParentOrganisation_OrganisationId'无效。
不完全确定这里发生了什么......什么是Discriminator
(我没有的专栏)以及为什么需要它?如何添加?为什么当我将模型设置为使用ParentOrganisation_OrganisationId
作为外键列时,EF会尝试查找列ParentOrgId
?
这对我来说有点神秘......有没有人在EF代码中成功完成此操作?我错过了什么?