2013-08-07 113 views
0

我嘗試添加新的存儲庫類表添加導航屬性稱爲PersonFieldGroupDomain但是這是它的樣子:如何在實體框架

enter image description here

所以基本上我們只有兩個領域爲這張桌子。所以我去了實體框架模型設計師,我無法將此表添加到使用數據庫更新模型的設計器中,甚至不可見。但是,當我看到其他依賴於它的表時,我只能將其視爲Navigational Property。

所以,我需要一個新的記錄添加到它,但因爲我不能直接像我爲他人做的背景下實現它,我嘗試使用「附加」的方法是這樣添加它:

var fieldGroupSet = FieldGroupSets.Single(t=>t.FieldGroupSetId == 1); 
fieldGroupSet.PersonFieldGroupDomainReference.Attach(Domains.Single(t=>t.DomainId == 2)); 

而這段代碼沒有工作。至少我在LinqPad上使用我在實際項目中使用的相同上下文組合來測試它。

這篇文章似乎在談論我可以使用的一些方法http://msdn.microsoft.com/en-us/data/jj592676.aspx但他們都沒有爲我工作。

任何工作的想法,將不勝感激。

+0

是DomainId主鍵嗎?在實體模型從數據庫中選取它之前,您需要在表中有一個主鍵。 –

+0

是的,'DomainId'是一個主鍵。 – Tarik

回答

1

看起來這張表只是一個連接表。 EF將在設計師視圖中隱藏這些內容。注意,如果您在表中添加代理鍵或任何其他內容,您將開始在設計器中將其視爲實體。

要使用它,它應該是這麼簡單

var fieldGroupSet = FieldGroupSets.Single(t => t.FieldGroupSetId == 1); 
var domain = Domains.Single(t => t.DomainId == 2); 
fieldGroupSet.Domain = domain; 
context.SaveChanges(); 

通過OP編輯:

我的注意:對不起編輯你的答案,但爲了紀念它作爲答案,我需要把我使用的實際代碼按照你的邏輯工作:

var fieldGroupSet = FieldGroupSets.Single(t=>t.FieldGroupSetId == 1); 
var domain = Domains.Single(t => t.DomainId == 3); 
fieldGroupSet.PersonFieldGroupDomain = domain; 
SaveChanges(); 

在上面的代碼中,由於PersonFieldGroupDomain是一個導航屬性,因此它直接轉到Domain,因此當您使用fieldGroupSet.PersonFieldGroupDomain屬性到達時,它的類型爲Domain。如上面的代碼所示,我直接使用現有的Domain對象進行設置,並在保存更改後,更改在數據庫中保持不變,並且工作正常!