2011-11-20 209 views
0

我有兩個表(用戶,消息),它們之間存在多對多的關係。 我想在消息表中添加新消息並將按摩分配給當前用戶。 此外,我插入數據如下圖所示:在實體框架中以多對多關係插入數據

Message newMessage = Message.CreateMessage("MessageText", "DateTime"); 
newMessage.Users.Add(new User{..... }); 
context.SaveChange(); 

這個代碼,而用戶表中有一些特定的用戶,我不希望添加新的用戶,但由於將執行一個查詢其在用戶表中添加新的用戶我提到我想在消息表中添加新消息,併爲當前用戶分配按摩。

我應該怎麼做?

回答

0

問題是您正在使用現有主鍵創建新的User對象。當調用SaveChanges()時,EF會檢測其已經跟蹤的實體以及添加的新實體的更改。由於您的新User對象未由EF進行跟蹤,因此它會嘗試插入它。

您需要明確告知EF創建的用戶是現有用戶。要做到這一點,你需要attach它。

Message newMessage = Message.CreateMessage("MessageText", "DateTime"); 

var user = new User{ Id = "foo" }; 
context.Users.Attach(user); 

newMessage.Users.Add(user);  
context.SaveChange();