我是Entity Framework 4.1的新手。我开始用EF作为我的DAL编写一个新的应用程序。我正在使用POCO类(使用POCO t4模板)和数据库第一种方法。
我的GenericRepository已经达到Update方法
public void Update(TEntity entity)
{
if (entity == null)
{
throw new ArgumentNullException("entity");
}
_context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
//_objectSet.ApplyCurrentValues(entity);
}
我有一个gridview,它是具有UpdateMethod =“UpdateStore”的ObjectDataSource的数据绑定,只有一个参数如下...
public void UpdateStore(Store franchise)
{
unitOfWork.StoreRepository.Attach(franchise);
unitOfWork.StoreRepository.Update(franchise);
unitOfWork.SaveChanges();
}
我在这里提出了几个问题:
当我看到ApplyCurrentValues的文档时,它证明我应该使用它来更新值,但这不起作用(正如您在上面的注释行中所见)。然后当我尝试使用ObjectStateManager.ChangeObjectState时,它可以工作。这两种方法有什么区别。
如您所见,我首先附加然后应用更新方法。我可以在GenericRepository更新方法中组合附加和更新状态。这样做有什么陷阱吗?
答案 0 :(得分:3)
ApplyCurrentChanges
收到的分离实体更新其值时,将使用ObjectDataSource
。执行此操作时,所有新值都将复制到附加实体,并自动标记为Modified
。 ChangeObjectState
用于更改附加实体的状态 - 它不会执行任何其他操作。调用Attach
会将实体附加到Unchanged
状态,因此这就是为什么必须更改状态以使更改保留在数据库中的原因.. Id
两次的实体将抛出异常。