实体框架:无效的列名称'OrganizationStructure_ID'

Dor*_*hir 36 entity-framework

我得到:错误:列名称'OrganizationStructure_ID'无效.

    public OrganizationStructure()
    {
        ChildrenItems = new HashSet<OrganizationStructure>();
        InputDate = DateTime.Now;
    }

    public int ID { get; set; }
    public string Name { get; set; }

    public virtual int? ParentID { get; set; }
    public int OrganizationID { get; set; }
    public int OrganizationTypeID { get; set; }
    public int OrganizationActivityID { get; set; }
    public int OrganizationLocationID { get; set; }

    public string AddRemark { get; set; }
    public int UserId { get; set; }
    public DateTime InputDate { get; set; }
    public int? RemAttr { get; set; }

    public virtual ICollection<OrganizationStructure> ChildrenItems { get; set; }
Run Code Online (Sandbox Code Playgroud)

指数行动:

    return View(_organizationStructureRepository.GetAll().ToList() 
             .Where(t => t.ParentID == null));
Run Code Online (Sandbox Code Playgroud)

Lad*_*nka 43

那是因为您没有将FK属性与导航属性配对.我希望ParentID应该指向父母OrganizationStructure并且ChildrenItems应该指向孩子OranizationStructures.

如果您的模型不包含Parent父级的导航属性,则OrganizationStructure必须使用fluent-API告知EF ParentID为FK:

modelBuilder.Entity<OrganizationStructure>()
            .HasMany(o => o.ChildrenItems)
            .WithOptional()
            .HasForeignKey(c => c.ParentID);
Run Code Online (Sandbox Code Playgroud)

  • @boomhauer:在派生的`DbContext`类中重写`OnModelCreating`方法并将所有映射放在那里.另一种选择是使用`EntityTypeConfiguration`派生类并在`OnModelCreating`中注册它. (4认同)

dre*_*wid 6

我想到的是当你有一个引用一个表的ICollection并且它没有可以找到的列时,它会创建一个让你尝试在表之间建立连接.这种情况恰好发生在ICollection上并且让我"慌乱"试图解决这个问题.