在Entity Framework代码中首先设置分层的自引用模型

时间:2016-05-27 06:55:22

标签: c# sql-server ef-code-first entity-framework-6 asp.net-4.5

我正在尝试在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代码中成功完成此操作?我错过了什么?

0 个答案:

没有答案