2014-05-08 33 views
1

我有两个表。客户和对话。在创建/编辑客户端的视图中,还可以选择添加与客户端关联的对话(使用BeginCollectionItem)。当我尝试使用以下代码更新(在编辑视图中):实体框架嵌套实体添加或更新

db.Clients.Attach(client); 
db.Entry(client).State = EntityState.Modified; //Conversations not added 

客户端表中的字段已更新,但未添加对话。在创建客户端时我不会遇到这个问题。

db.Clients.Add(client); //Conversations are added 

是否有可能在不必明确添加对话的情况下完成此操作?

回答

1

首先连接客户端,然后将谈话添加到它:

var client = db.Clients.Attach(new Client()); 
client.Conversations.Add(conversation); 

db.SaveChanges(); 

无需更改客户端的状态编程..如果您将客户端的情况下第一,实体框架将跟踪更改。

编辑:

因为当你把它连接到上下文对象已建成,你需要告诉谈话孩子要么被添加或修改

foreach (var conversation in client.Conversations) 
{ 
    if (conversation.Id == default(int))   
     context.Entry(conversation).State = EntityState.Added; 
    else 
     context.Entry(conversation).State = EntityState.Modified; 
} 
+0

我很抱歉,如果EF我点不清楚,我没有在代码中手动添加对话。他们被绑定在回发的模型中。对话已经与客户端相关联。现在,如果我要采用您的代码,我再次需要将对话明确地链接到客户端。 – xrnd

+0

马丁,它的工作,但我仍然觉得它更明确。我会认为这些任务是在后台执行的。现在工作!谢谢 – xrnd