【发布时间】:2015-05-09 00:31:45
【问题描述】:
我正在使用自动映射器将我的实体映射到视图模型,并在从视图返回时将视图模型形成回实体。
我有一个小问题,我修改的对象中有一个嵌套实体列表,可以在视图中修改。当我保存主对象时,即使所有内容看起来都正确映射到其嵌套实体中,嵌套实体也不会更新(在控制台中看不到与它们相关的 SQL 语句)。
我很确定我想确保 EF 知道它们已被修改。
我发现的唯一一件事是通知框架实体已在我的控制器中被修改(即使不是全部):
Database.Entry(character).State = EntityState.Modified;
foreach(CharacterAbilityScore cab in character.CharacterAbilityScores)
Database.Entry(cab).State = EntityState.Modified;
如果我没记错的话,当我在视图中使用实体而不是 ViewModel 时,我不需要通知 EF 嵌套实体已被修改,它知道并相应地更新了数据库。
我只是想确保我有正确的方法。
如果您需要更多代码,请告诉我!
更新:
这是我配置自动映射器的方式:
Mapper.CreateMap<CharacterViewModel, Character>()
.ForMember(dest => dest.CharacterAbilityScores, opt => opt.MapFrom(src => src.CharacterAbilityScoresDTO));
最终更新,答案:
由于我处于 MVC 模式,并且当我们从视图上的帖子返回时重新创建上下文,我必须手动管理我的子实体的更改方式,无论是使用自我跟踪实体还是像我一样,标记当我知道他们可能会修改它们时。不过,这将导致比必要的更新更多。
【问题讨论】:
标签: asp.net-mvc entity-framework asp.net-mvc-5 automapper