entity-framework-ctp5 - 在 EF4 CTP5 Code First 中模拟 DbEntityEntry.CurrentValues.SetValues()

标签 entity-framework-ctp5 ef4-code-only

我正在尝试使用 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 问题,所以请保持温和)

最佳答案

如果您以前从未使用过它,这将是 AutoMapper 的一个很好的用途(也可通过 NuGet 获得)。我不知道如何解决您的 IMyContext 问题,并且还会求助于映射属性。但我不会手动执行此操作,而是允许 AutoMapper 完成繁重的工作。

关于entity-framework-ctp5 - 在 EF4 CTP5 Code First 中模拟 DbEntityEntry.CurrentValues.SetValues(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5409877/

相关文章:

entity-framework - EF4 CTP5 : DbContext inheritance

c# - EF4 代码首先与外部实体建立多对多关系

entity-framework-4 - DbContext SaveChanges 语句执行顺序

sql - 使用 Entity Framework CTP 5 "code only"时,如何获取 LINQ 查询背后的原始 SQL?

c# - Entity Framework 4 : Code First - Creating db in another schema? MapSingleType?

sql-server - Entity Framework Code First - 更改表列排序规则

ef-code-first - 使用 Entity Framework 代码优先进行 mvc-mini-profiler 数据库分析

c# - ASP.NET MVC 中 Controller.ReadFromRequest 的替代品是什么?

entity-framework - 如何使用EF4 Code First在同一张表中进行多对多

entity-framework-4 - EF4 CTP5-HasColumnType不起作用