我正在尝试使用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选项。 / p>
有没有办法解决这个问题,或者我是否需要咬住子弹并从DTO手动设置实体的修改属性(对于具有许多属性的实体可能有很多样板)?
(我对EF很新,这是我的第一个StackOverflow问题,所以请温柔一点)
答案 0 :(得分:0)
如果您之前从未使用过它,那么AutoMapper(也可通过NuGet提供)将非常有用。我不知道如何解决你的IMyContext问题,也不知道如何映射属性。但是,我不会手动执行此操作,而是允许AutoMapper执行繁重的操作。