2016-03-03 26 views
0

我維護要在數據庫中完成的操作(刪除和更新)列表。 我使用foreach迭代列表並執行這些操作。下面是示例僞代碼。我使用實體框架和SQL Server作爲它背後的數據庫。無法在C#Entity Framework中正確迭代地進行數據庫更改

foreach (dbChange in dbChanges) 
     { 
      switch (dbChange.Operation) 
      { 
       case Add: 
        queryStr = String.Format("DELETE FROM {0} WHERE {1} = {2}", 
         dbChange.TableName, 
         dbChange.PrimaryKeyName, 
         dbChange.PrimaryKeyValue); 
        break; 
       case Update: 
        queryStr = String.Format("UPDATE {0} SET {1} = '{2}' WHERE {3} = {4}", 
         dbChange.TableName, 
         dbChange.ColumnName, 
         dbChange.PreviousValue, 
         dbChange.PrimaryKeyName, 
         dbChange.PrimaryKeyValue); 
        break; 
      } 

     DBQuery.ExecuteCommand(ConnectionString, queryStr, 10); 

     } 

我的問題:它運行完美,做必要的修改。但有時候隨機的數據庫操作沒有正確完成。像某些值沒有更新或某些行未被刪除。

我試了很多找出背後的可能原因。可能的原因是什麼(比賽條件或其他?)並對其進行糾正。提前致謝。

+0

爲什麼不以正確的方式使用EF而不是使用'DbQuery'? –

回答

0

不包括SaveChanges或查詢後更改記錄值的其他查詢,您需要跟蹤異常和ExecuteCommand的結果(應該是1),否則將很難理解問題。

無論如何,只是爲了啓動錯誤可能是:
1. SQL語法(更新查詢或無效字段名稱中的SQL注入)。所以用dbChange.PreviousValue.Replace("'", "''")替換dbChange.PreviousValue並引用字段名稱。
2.參照完整性違規(您可以使用ExecuteCommand返回值來檢查它)

相關問題