2011-03-24 70 views
1

可以說我有:實體框架(4)外鍵關係問題

一個用戶名的實體,具有Int64的,作爲標識和其他一些領域。

的消息實體,具有的Int64作爲ID,並通過1名的用戶名鏈接到用戶名實體一些其它字段可以有0到許多消息的關係。

我有兩個庫(基本所有,添加,刪除,保存方法)的用戶名和信息的實體。

但我想,我在代碼生成()新的消息(ETC)的消息實體與關聯的用戶名我怎麼會做這樣一個存儲庫和跨兩個不同的objectcontexts?

我得到了它通過通過不使用倉庫工作:

usernameEntity.Messages.Add(msg); 

任何人有任何提示,而困惑,如果我可以這樣類型的邏輯分成兩個不同的存儲庫。

回答

2

你就叫:

var user = repository.GetUserById(id); 
user.Messages.Add(new Message(...)); 
Save(); // I don't know how do you save changes. 

你的倉庫應該共享一個上下文一個工作單元(商業交易)。你應該有一些方法(保存,提交或其他),它將保存從所有存儲庫加載的實體所做的更改。這通常由一個獨立的類來實現,該類實現了包裝上下文並在存儲庫之間共享的工作單元模式。在工作單元而不是存儲庫上調用保存更改。這個問題有很多相關的問題。

在在EFv4你也可以用簡單的模擬真實的外鍵關係情況:

var message = new Message(...); 
message.UserId = id; // Foreign key property exposed on Message entity 
repository.Insert(message); 
Save(); 
0

如果是一對多的關係,那麼你的消息實體應該有它的用戶名ID。您可以使用用戶名ID來查找用戶對象在郵件中的實體存儲庫的ObjectContext和消息添加到用戶,然後保存更改。

1

你需要跨越多個存儲庫工作單位 - 並負責將更改提交到數據庫。

1

我使用相同的實體上下文頂部的存儲庫模式,因此您可以輕鬆地在存儲庫之間共享對象。