2012-04-21 43 views
1

我曾經在一個通用的基礎類下面的方法:EF4.3知道上下文已經成功地插入實體

public virtual void Insert(TEntity entity) { 
     dbSet.Add(entity); 
    } 

我的服務層使用Insert方法來添加新記錄。現在我想能夠返回一個布爾,以確保它正確插入。像下面這樣:

public virtual int Count { 
     get { 
      return dbSet.Count(); 
     } 
    } 

    public virtual bool Insert(TEntity entity) { 
     int count = this.Count; 
     dbSet.Add(entity); 

     return this.Count == count + 1; 
    } 

有沒有更優雅的方式呢?我是否完全錯誤地接近它?我可以爲Delete方法做類似的事情,但是如何檢查Update是否已成功執行?

回答

4

你不需要那樣做。添加將成功或拋出一個異常。它不能無法添加和返回而不會拋出。

更重要的是,查詢不會立即執行。它只是排隊直到Commit(context.SaveChanges())被調用。所以你不知道實際的SQL是否會失敗,直到以後。

+0

是的,這是正確的,如果存在數據庫錯誤和添加將拋出一個錯誤,如果存在上下文錯誤,如果您調用add然後SaveChanges沒有錯誤,那麼它已成功提交,SaveChanges將拋出異常。 – 2012-04-22 06:04:17

+0

好的,謝謝你澄清,我知道當我調用'SaveChanges()'時,實際的SQL只被發送到數據庫。捕獲潛在錯誤的最好方法是將調用'Insert'的代碼包裝到try catch塊中? – Mekswoll 2012-04-22 14:51:50

+0

@pEkvo - .net中的幾乎任何東西都可以在正確的情況下拋出異常。你不能在任何事物上放一個try/catch塊。添加拋出異常與WriteLine拋出異常的可能性相同(實際上WriteLine可能更可能)。老實說,這是你不需要擔心的事情。 – 2012-04-22 18:28:31

相關問題