網(wǎng)上看到很多朋友在Update的時候都會用如下方法:
創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、成都網(wǎng)站制作和成都移動云計算中心的網(wǎng)絡公司,有著豐富的建站經(jīng)驗和案例。
var sel=from t in _dataEntities.Employee where t.Id=newEntity.Id select sel;
if(sel.Count()==0)return;
Employee entity = sel.First();
entity.Name = newEntity.Name;
.......
簡單的說就是將新對象的屬性一個個復制,這樣做當屬性少的時候還可以,但屬性多的時候就顯的低效率,代碼又長又惡心。所以自己總結出了UPDATE最簡單的方法。
///
/// 修改員工信息
///
///
///
[OperationContract]
public Employee UpdateEmployee(Employee newEntity)
{
_dataEntities.Employee.Attach(newEntity); // 附加對象
_dataEntities.ApplyCurrentValues
_dataEntities.ObjectStateManager.ChangeObjectState(newEntity, EntityState.Modified); // 修改對象狀態(tài),當EntityState為Modified時,SaveChanges才會執(zhí)行變更,否則無效。
return CommitAllChanges
}
以下是泛型方法,適用于增刪改的數(shù)據(jù)保存,同時解決了并發(fā)沖突。
///
/// 應用數(shù)據(jù)變更
///
///
///
private T CommitAllChanges
{
try
{
// 解決并發(fā)沖突
if ((entity as EntityObject).EntityState!=EntityState.Added)
_dataEntities.Refresh(RefreshMode.ClientWins, entity);
_dataEntities.SaveChanges();
}
finally
{
if ((entity as EntityObject).EntityState != EntityState.Detached)
_dataEntities.Refresh(RefreshMode.StoreWins, entity);
}
return entity;
}