Yar*_*evi 6 entity entity-framework-4
我们有一个WCF服务,其中包含更新数据库中客户的更新方法.此方法从客户端获取分离的实体.
void UpdtaeCustomer(Customer detachedCustomer);
Run Code Online (Sandbox Code Playgroud)
我们提出了两种编写此方法的方法:
1)
context.CustomerSet.Attach(detachedCustomer);
context.ObjectStateManager.ChangeObjectState(detachedCustomer, entityState.Modified);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
2)
Customer customer = context.GetObjectByKey(detachedCustomer.EntityKey);
context.ApplyCurrentValues<Customer>("CustomerSet", detachedCustomer);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我们想要考虑每种方法的缺点.第一个明显的优势是只有一次DB.但第二种方法的优点是什么呢?(或者他们的行为可能不一样)?
使用第一种方法.使用具有分离实体的第二种方法没有一般优势,相反它可能使事情变得更糟.
假设您使用时间戳.时间戳是表示行版本的特殊DB类型.每次数据库中的记录更改时,时间戳都会自动增加.时间戳用于concurrecny检查,当与EF一起使用时,它作为Computed列处理.每次EF想要更新记录时,它都会将数据库中的时间戳与您加载对象时检索的时间戳进行比较(必须在您的实体中传输到客户端并返回).如果时间戳相同,则保存记录.如果它们不同则抛出异常.
这两种方法的区别在于第一种方法使用分离对象的时间戳,而第二种方法使用加载对象的时间戳.原因是计算列.无法在应用程序中更新计算值.
| 归档时间: |
|
| 查看次数: |
2520 次 |
| 最近记录: |