我正在尝试使用 DbEntityEntry.CurrentValues.SetValues() 方法来促进使用来自非实体 DTO 的值更新现有实体(请参阅:http: //blogs.msdn.com/b/adonet/archive/2011/01 /30/using-dbcontext-in-ef-feature-ctp5-part-5-working-with-property-values.aspx)
我无法消除对 DbEntityEntry 的依赖(用于模拟、测试)。这是我想做的一个例子:
var entity = dbSet.Find(dto.Id);
var entry = context.Entry(entity);
entry.CurrentValues.SetValues(dto);
context.SaveChanges();
我也考虑过:
EntityType entity = new EntityType() { Id = dto.Id };
context.Attach(entity);
var entry = context.Entry(entity);
entry.CurrentValues.SetValues(entity);
context.SaveChanges();
在使用实际 DbContext 时,我发现两者似乎都是合理的,但是当我将上下文抽象为 IMyContext 时,我失去了为实体获取 DbEntityEntry 的能力,从而失去了 SetValues 选项。
有什么办法可以解决这个问题,还是我需要硬着头皮手动设置 DTO 中实体的修改属性(对于具有许多属性的实体来说可能有很多样板文件)?
(我对 EF 还很陌生,这是我的第一个 StackOverflow 问题,所以请保持温和)