使用上面的模型,我试图保存一个新的PamNewsMessage
并向其添加标签,然后将其保存到数据库中。但是,在尝试添加对象和保存的许多不同组合之后,我仍然遇到重复条目(不是重复键)的相同问题。
目前,这是我用来进行更改的内容,它适用于PamNewsMessage
,但是如果标签已经存在,则会产生重复。
_theService = new WCFPamUpdateServiceEntities3();
_theService.PamNewsMessages.AddObject(pnm);
_theService.SaveChanges();
我不确定我还需要做什么,它应该非常直接。我已经阅读了很多人遇到类似问题而我找不到明确的解决方法。任何人都可以帮助我在这里我已经乱了几个小时现在阅读和尝试不同组合的方式来保存事物,改变状态,什么不是。
谢谢,
理查德
抱歉无法发布图片,长时间阅读第一次海报: - )
(为你修好了 - marc_s)
答案 0 :(得分:1)
简短回答是:EF不会为你做这件事。
您使用了分离对象,现在您必须明确告诉EF您做了哪些更改=它通常意味着使用图中每个实体的状态和图中的每个independent association(多对多总是独立协会)。如果你打电话给AddObject
,你告诉EF不仅要添加整个对象图单个实体。
如果您只是知道要添加NewsMessage,而且此消息只有现有的标签,您可以执行以下操作:
_theService = new WCFPamUpdateServiceEntities3();
_theService.PamNewsMessages.AddObject(pnm);
foreach (var tag in pnm.Tags)
{
_theService.ObjectStateManager.ChangeObjectState(tag, EntityState.Unchanged);
}
_theService.SaveChanges();
显然,一旦你进入更复杂的场景,你也可以添加新标签或删除与现有标签的连接,这个简单的解决方案将无效。