2011-11-20 146 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();