我有两张桌子。客户和对话。在创建/编辑客户端的视图中,还有一个用于添加与客户端关联的对话的选项(使用BeginCollectionItem)。当我尝试使用以下代码更新(在编辑视图中):
db.Clients.Attach(client);
db.Entry(client).State = EntityState.Modified; //Conversations not added
更新了Client表中的字段,但未添加对话。创建客户端时我没有遇到这个问题。
db.Clients.Add(client); //Conversations are added
是否可以在不必明确添加会话的情况下完成此操作?
答案 0 :(得分:1)
首先附加客户端,然后将对话添加到其中:
var client = db.Clients.Attach(new Client());
client.Conversations.Add(conversation);
db.SaveChanges();
无需以编程方式更改客户端的状态。如果首先将客户端附加到上下文,实体框架将跟踪更改。
编辑:
由于在将对象附加到上下文时已经构造了对象,因此您需要告诉EF已经添加或修改了对话的子对象
foreach (var conversation in client.Conversations)
{
if (conversation.Id == default(int))
context.Entry(conversation).State = EntityState.Added;
else
context.Entry(conversation).State = EntityState.Modified;
}