gpt4 book ai didi

wcf - WCF和EF多对多重复

转载 作者:行者123 更新时间:2023-12-02 04:06:25 26 4
gpt4 key购买 nike

使用上面的模型,我试图保存一个新的PamNewsMessage并向其中添加标签,然后将其保存到数据库中。但是,在尝试了添加对象和保存的许多不同组合之后,重复条目(不是重复键)仍然存在相同的问题。

当前,这是我用来进行更改的内容,它适用于PamNewsMessage,但是如果Tag已经存在,它将进行重复。

_theService = new WCFPamUpdateServiceEntities3();
_theService.PamNewsMessages.AddObject(pnm);
_theService.SaveChanges();

我不确定在这里还需要做什么,这应该很简单。我读过很多人遇到类似的问题,但没有找到明确的解决方案。有人可以帮我解决这个问题吗?我已经花了许多个小时来解决这个问题,现在阅读并尝试了各种不同的组合来保存事情,更改状态以及不进行其他操作。

谢谢,

理查德

很抱歉无法张贴图片,长时间的读者第一次张贴:-)
(已为您修复了此问题-marc_s)

最佳答案

第一次遇到这个问题时,Here只是一点点理论。 Here是与EF相关的一些描述。

简短的答案是: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();

显然,一旦进入更复杂的场景,您还可以添加新标签或删除与现有标签的连接,此简单的解决方案将无法使用。

关于wcf - WCF和EF多对多重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7402087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com