2011-04-15 36 views
0

有沒有辦法可以禁用EntityFramework中引發的併發錯誤?實體框架刪除對象 - 併發錯誤(如何禁用併發)?

例如:

using (xEntities5 entities = new xEntities5()) 
      { 
       entities.Domains.MergeOption = System.Data.Objects.MergeOption.NoTracking; 
       Domain domain = new Domain() { DomainId = id }; 
       EntityKey key = entities.CreateEntityKey(entities.CreateObjectSet<Domain>().EntitySet.Name, domain); 
       domain.EntityKey = key; 
       entities.Attach(domain); 
       //entities.AttachTo(entities.CreateObjectSet<Domain>().EntitySet.Name, domain); 
       entities.DeleteObject(domain); 
       return entities.SaveChanges(); // returns affected rows... must catch error? 
      } 

有沒有辦法不用做試/周圍的SaveChanges抓,以檢測是否沒有刪除?

回答

1

SaveChanges()會拋出異常並且不會在內部捕獲它們,所以如果你想繼續執行,你必須使用try/catch。 SaveChanges()還會返回一個方法,其中包含提交給數據庫的實體數量,也就是說,如果沒有發生錯誤:-)

HTH。

2

據我所知,你不能關閉併發錯誤。併發性錯誤基於受影響的行數,因此如果要刪除一行並且它不被刪除(例如因爲它不再存在),將觸發併發異常。另外SaveChanges在事務中工作,所以如果你想刪除5行並且只有4行被刪除,那麼異常被觸發並且所有的刪除都被回滾。

如果使用標記爲ConcurrencyMode.Fixed的列,併發測試可能會受到更多限制。這些列用於SQL語句的條件,因此只能處理未修改的數據庫記錄。

一旦你得到併發異常,你應該解決它。