我正在使用MVC.net,我有2个类(案例和事故),有很多关系,我也使用自动映射器将View Models复制到EF,反之亦然。现在我遇到的问题是当我这样做时:
Case theCase = Mapper.Map<CaseEditVM, Case>(theCaseEditVM);
theCase.Accidents.Clear();
UOW.Cases.Update(theCase);
保存了案例的更改,但事故的链接表却没有。完全忽略了事故的变化。
然而,当我这样做时:
Case theCase = UOW.Cases.GetByID(someid).Include("Accidents");
theCase.accidents.Clear();
UOW.Cases.Update(theCase);
EF正确保存了事故财产。
所以我可以告诉EF忽略事故属性,因为它还没有映射到EF内部。但是有意义的是,在映射View模型时我如何告诉它我希望EF也更新链接的属性?
答案 0 :(得分:0)
在您的情况下,最简单的方法是首先将案例附加到上下文并在附加后清除更改。否则你将a lot of work。没有任何魔法能够为你做到这一点。 EF不了解你在分离实体上做的关系的变化,更糟糕的是,一旦你将实体附加到上下文,你已经不知道导航属性中包含了哪些记录,所以你不能配置上下文来反映它(它必须在每个单独的相关实体上完成)而不重新加载整个实体并合并分离和附加的实体之间的变化。