2017-03-01 61 views
0

我使用EF7,我有三個實體:EF7值未保存

class A { 
    public int Id; 
    public B B; 
} 


class B { 
    public int Id; 
    public string SomeValue; 
    public virtual IEnumerable<C> C; 
} 

public class C { 
    public int Id; 
    public string SomeValue; 
    public virtual B B; 
} 

自動生成的遷移似乎罰款,以及一個外鍵從下加入B. 然而,當我這樣做,沒有值被分配給數據庫中的外鍵:

var a = _dbContext.A.Single(x => x.Id == id); 
a.B = new B { 
    SomeValue = "SomeValue"; 
    C = listOfC; 
}; 
_dbContext.SaveChanges(); 

C的實際值存儲在相應的表格,但隨着外鍵不保存我再也無法找回相對於B.

EF7無法正確執行嵌套插入?有什麼辦法可以解決這個問題嗎?

編輯: 顯式聲明外鍵使其不能爲空,這意味着插入失敗(「壞外鍵約束」)。

+1

請更新您的例子包括類的實際性能,從你的定義沒有ID定義,也無法爲外鍵的值Id, –

+0

對不起。你是沒有這個實體的外鍵的屬性--EF自動生成這個。我曾嘗試明確地在實體中聲明它,但是這絕對沒有改變。 – severin

+0

好吧,這不是絕對正確的,顯式聲明外鍵使其不能爲空,這意味着插入失敗,因爲數據庫抱怨外鍵的缺失值。 – severin

回答

0

改變了IEnumerable在B到ICollection的解決問題:

class B { 
    public int Id; 
    public string SomeValue; 
    public virtual ICollection<C> C; 
}