【发布时间】:2011-04-30 13:17:17
【问题描述】:
我有一个用纯 POCO 实现的 Entity Framework 4.0 模型(没有代码生成,没有自跟踪实体,只是普通的旧 CLR 对象)。
现在,我的 UI 中有一些代码用于执行 UPDATE:
[HttpPost]
public ActionResult UpdatePerson(Person person)
{
repository.Attach(person);
unitOfWork.Commit();
}
基本上,我有一个接受强类型 Person 对象的操作方法,我需要更新这个实体。
不会出错,但也不会将更改持久化到数据库中。 :(
当我在工作单元的“提交”期间检查 EntityState 时:
var entities = ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified | EntityState.Unchanged);
我看到了我的实体,带有 EntityState.Unchanged。
这就解释了为什么它没有被持久化。我的查找、添加、删除操作工作正常(正确保留)。但 UPDATE 似乎不起作用。
我发现一些线程说我需要手动设置对象状态:
ctx.ObjectStateManager.ChangeObjectState(person, EntityState.Modified);
正确吗?我会把这个逻辑放在哪里?公开为我的工作单元上的操作?
显然,由于使用了 Pure POCO(没有 EntityObject 派生,没有 INotifyPropertyChanging 实现),我没有任何更改跟踪。
但是直到现在我还没有发现它的问题。
我做错了什么?
【问题讨论】:
标签: c# asp.net-mvc-2 entity-framework-4 poco objectstatemanager