2011-04-30 106 views

回答

7

不,沒有這樣的內置功能 - 你必須建立自己的。很常見的是像實例方法:

public void SaveOrUpdate(MyEntity entity) 
{ 
    if (entity.Id == 0) 
    { 
     context.MyEntities.AddObject(entity); 
    } 
    else 
    { 
     context.MyEntities.Attach(entity); 
     context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified); 
    } 

    // You can call SaveChanges here or you can call it separately after multiple changes 
} 

這是例如,對於與在數據庫(IDENTITY)產生Id自動脫離實體工作。新實體的默認ID始終爲0,因爲實際值將在保存更改期間分配。

+0

謝謝,但是,當使用DDD並且你正在附加一個聚合根,有幾層的屬性嵌套,那麼你需要做一些形式或遞歸。有沒有這樣的例子? (這也令人費解,EF團隊希望開發者自己處理這種常見的場景,當其他的ORMS如NHibernate提供開箱即用的合併時) – 2014-04-25 15:16:24

+4

但是如果你不知道數據庫中是否存在該對象呢? 'MERGE'語句正好用於確定對象是否存在,並根據需要更新或插入*。 – 2014-11-17 16:49:19

+1

您錯過了刪除部分。 – Azimuth 2017-05-16 14:25:43