您好,登錄后才能下訂單哦!
網上看到很多朋友在Update的時候都會用如下方法:
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最簡單的方法。
/// <summary>
/// 修改員工信息
/// </summary>
/// <param name="newEntity"></param>
/// <returns></returns>
[OperationContract]
public Employee UpdateEmployee(Employee newEntity)
{
_dataEntities.Employee.Attach(newEntity); // 附加對象
_dataEntities.ApplyCurrentValues<Employee>("Employee", newEntity); // 應用新對象
_dataEntities.ObjectStateManager.ChangeObjectState(newEntity, EntityState.Modified); // 修改對象狀態,當EntityState為Modified時,SaveChanges才會執行變更,否則無效。
return CommitAllChanges<Employee>(newEntity);
}
以下是泛型方法,適用于增刪改的數據保存,同時解決了并發沖突。
/// <summary>
/// 應用數據變更
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
private T CommitAllChanges<T>(T entity)
{
try
{
// 解決并發沖突
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;
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。