1

尝试更新时出现此错误。

作为类似于我正在处理的结构的示例:

我有一个博客,其中包含 ICollection 的帖子。每个帖子都有一个 ICollection 评论。我想一口气更新博客、帖子和评论。

var blog = blogRepository.Load(x => x.Posts.Select(y => y.Comments)).Single(x => x.BlogID == blogVM.BlogID);

Mapper.DynamicMap(blogVM, blog);
blogRepository.Update(blogVM, blog);
blogRepository.Save();

当它尝试执行 blogRepository.Update 代码时,它会抛出一个错误:已检测到对关系角色的冲突更改。

我正在使用 AutoMapper、FluentAPI、Entity Framework 5.0 和 MVC 3.0。

有任何想法吗?

莫内卡

4

3 回答 3

0

当我收到此错误时,问题是“子”(在您的情况下为帖子和评论)对象对其父(博客)的引用需要更新。也就是说,Blog 的状态为 X。Blog.Posts[0].Blog 的状态为 Y。

我的应用程序是一个原型,所以我在更新/保存之前采取了“手动”更新模型中引用的捷径。它可能不是一个非常漂亮的解决方案,但您可以看到它至少解决了您的问题 - 然后从那里开始。

我现在看到这是一个旧帖子。也许你已经解决了?请告诉我!

于 2014-03-05T09:32:11.803 回答
0

我遇到了与 EF/AutoMapper 完全相同的问题。

我使用 AutoMapper 从另一个子类的实例生成对象。但是有一个导航属性,并自动映射到结果中。因此,当我尝试更新时,该导航属性会导致“冲突更改”问题。所以我的解决方案是删除自动映射导航属性(实际上,我删除了该属性的外键,因此 EF 将使用该属性创建新记录)。

如果您的博客blogVM都具有导航属性,并且尝试将 blogVM 设置为 0。

于 2014-05-11T13:59:10.320 回答
0

是的,我能够通过手动映射我需要更新/添加/删除的值来解决这个问题。不是一个优雅的解决方案,但它对我有用。谢谢。

于 2014-04-21T16:36:24.650 回答