2011-09-26 127 views
4

在實體框架,你必須編寫大量的代碼保存或更新一個單一實體的等效Hibenate.saveOrUpdate():什麼是實體框架

using (DataContext context = new DataContext()) 
    { 
     context.Task.Attach(task); 
     if (task.ID == 0) 
     { 
      context.ObjectStateManager.ChangeObjectState(task, System.Data.EntityState.Added); 
     } 
     else 
     { 
      context.ApplyOriginalValues(task.GetType().Name, task); 
     } 
      context.SaveChanges(); 
    } 

在休眠它只是saveOrUpdate()

這不是關於懶惰,而是關於使它變得簡短和乾淨。

回答

4

沒有等價物。你真的必須這樣寫:

using (DataContext context = new DataContext()) 
{ 
    context.Task.Attach(task); 
    if (task.ID == 0) 
    { 
     context.ObjectStateManager.ChangeObjectState(task, System.Data.EntityState.Added); 
    } 
    else 
    { 
     context.ObjectStateManager.ChangeObjectState(task, System.Data.EntityState.Modified); 
    } 

    context.SaveChanges(); 
} 
+0

你能想到一種方法來包裝它嗎? (關係支持以及)謝謝 – SexyMF

+0

對於關係它更糟糕:http://stackoverflow.com/questions/3635071/update-relationships-when-saving-changes-of-ef4-poco-objects/3635326#3635326和不要認爲它可以輕鬆包裹。 –

+0

我在我的項目開始時,你能推薦一些更優雅的東西(其他ORM)嗎? 謝謝 – SexyMF