已经检测到关系角色的冲突变化

时间:2013-09-25 19:57:56

标签: entity-framework-5

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

作为一个类似我正在研究的结构的例子:

我有一个博客,其中有一个ICollection的帖子。每个帖子都有一个ICollection of Comments。我想一次性更新博客和帖子和评论。

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。

有什么想法吗?

Moneka

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:-1)

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

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

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