2012-01-25 63 views
30

我得到:錯誤:無效的列名'OrganizationStructure_ID'。實體框架:無效的列名'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; } 

index動作:

return View(_organizationStructureRepository.GetAll().ToList() 
      .Where(t => t.ParentID == null)); 
+0

是'OrganizationStructure'一個實體(來自EF?)你有什麼例外? – gideon

+1

EF,例外:無效的列名稱'OrganizationStructure_ID' –

+2

顯然自動外鍵在某個時刻從{實體} ID更改爲{實體} _ID。 EF5也許。 –

回答

37

那是因爲你沒有用的導航屬性對您的FK財產。我預計ParentID應該指向父母OrganizationStructureChildrenItems應指向子女OranizationStructures

如果模型沒有包含Parent導航屬性於母公司OrganizationStructure必須使用流暢的API來告訴EF這ParentID是FK:

modelBuilder.Entity<OrganizationStructure>() 
      .HasMany(o => o.ChildrenItems) 
      .WithOptional() 
      .HasForeignKey(c => c.ParentID); 
+3

一個人把這個代碼放在哪裏? –

+3

@boomhauer:在派生的'DbContext'類中覆蓋'OnModelCreating'方法並放置所有映射。另一種選擇是使用'EntityTypeConfiguration'派生類並將其註冊到'OnModelCreating'中。 –

+0

我發現如何添加一個foreignkey attibute來爲我照顧這個模型。但是謝謝 –

3

我已經想通了,是當你有一個ICollection的那引用一個表並且沒有可以找出的列,它會爲您創建一個表來試圖建立連接。這種情況發生在ICollection上,並促使我「蝙蝠」試圖找出答案。

3

我有一個類似的問題,刪除不需要的公共虛擬ICollection的條目,解決了它。

+0

你達人......在最後的60分鐘裏竊聽我 – Tosh

+0

同樣在這裏,直到我找到這個 – stillsmallvoice

1

這也可能是如果你在子實體中聲明引用域爲簡單字段,但不是屬性!

int ParentId //will be ignored; 

int ParentId {get; set;} // it'ok (but could be ignored 
         //if the parent entity name isn't 'Parent'); 

[ForeignKey("MyParentEntity")] 
int ParentId {get; set;} // is the best way (or use fluent-api) 
相關問題