在实体框架中以多对多的关系插入数据

时间:2011-11-20 09:19:13

标签: entity-framework-4 insert many-to-many relationship

我有两个表(用户,消息),它们之间存在多对多关系。 我想在消息表中添加新消息并为当前用户分配按摩。 我也插入如下数据:

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

此代码将执行一个查询,在users表中添加一个新用户,而users表有一些指定的用户,我不想添加新用户,但正如我所提到的,我想在消息表中添加新消息并分配对当前用户的按摩。

我应该怎么做?

1 个答案:

答案 0 :(得分:0)

问题是您正在使用现有主键创建新的User对象。当SaveChanges()被调用时,EF会检测已经跟踪的实体的更改以及添加的新实体。由于EF未跟踪新的User对象,因此会尝试插入它。

您需要明确告诉EF所创建的用户是现有用户。要做到这一点,你需要attach它。

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

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

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