已检测到关系角色的冲突更改



我在尝试更新时收到此错误。

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

我有一个博客,里面有一堆帖子。每个帖子都有评论。我想一次性更新博客,帖子和评论。

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。

有什么想法吗?

莫内卡

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

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

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

是的,

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

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

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

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

最新更新