0

问题:MVC 3独立实体正确保存相关子项

我需要将更新的分离EF对象保存到数据库。

的deatched实体通过结合基础机构,然后

foreach child ... 
    entity.children.add(child) 

我添加子实体,我也从绑定得到控制器的阵列创建。

我想要什么,是旧实体的新的实体完全取代,这意味着:

entity.property => update (easy) 
entity.child => delete old child if not exists in the new, 
       update if already exists (easy), 
       or add if it doesnt exist already 

我到目前为止有:

items tempitem = new items() { id = item.id }; 
_context.items.Attach(tempitem); 
_context.items.ApplyCurrentValues(item); 
foreach (var itemchild in item.children) 
{ 
    childEntity tempchild= new childEntity() { parentid = item.id }; 
    _context.childEntity.Attach(tempchild); 

    _context.childEntity.ApplyCurrentValues(itemchild); 
} 

这让我更新基地实体很好,并且还可以更新任何现有的实体。

它没有让我删除旧的实体 - 试图做一个

item.children.Clear() 

但没有任何反应,而且还当我尝试添加一个新的子实体(即在绑定到分离的) - 什么也没有发生任何。

这不能太难,可以吗?我想转向的NHibernate里的东西看起来不那么臃肿,更简单但功能强大...

+0

我不知道这里发生了什么。我在回答下面看到了你的评论,并在下面写下我自己的评论(说我没有删除任何答案(我不能删除答案),而且我昨天回答时根本没有答案)。现在两条评论都没有了。我不知道为什么。我猜你会因为某种原因而生气,认为我确实删除了其他答案。我只能告诉你,我只是写了我的答案,这就是我所做的。 – Slauma

+0

我把这个带到Meta:http://meta.stackexchange.com/q/114513/174063。他们说这里没有删除的答案。如果你确定你已经在这里提交了你自己的答案,并且这里还有其他答案,你应该在Meta上描述它作为一个可能的错误。 – Slauma

+0

你好,对于那时的反应感到抱歉,我以为这是你的所为。显然,评论也被删除了,所以有些事情是非常错误的。当我有更多的时间时,我也会注册meta并追求这一点。 –

回答

0

基本上你必须(使用Include例如父母所有儿童)从数据库加载原始对象图,否则EF无法知道哪些孩子是新的,哪些孩子已被删除。您必须通过比较已加载的原始子集合与分离实体中的当前集合来添加或删除子代。

一个示例如何做到这一点在这里:https://stackoverflow.com/a/5540956/270591

相关问题