C# linq2db操作sqlite進行刪除操作時異常
阿新 • • 發佈:2018-12-20
【問題描述】 在對linq2db進行刪除操作前,先將需要刪除的資料集查詢出來, 再呼叫db.[表物件].delete()方法執行刪除操作,程式碼如下:
using (SqliteDB db = new SqliteDB(connectionString)) { IQuerable<T> infoList = db.[表物件].where(x => x.attr == condition); if (infoList != null && infoList.Count() > 0) { foreach ([表物件] info in infoList) { deleteCount += db.Delete<[表物件]>(info); } if (deleteCount != infoList.Count()) { result = false; } } }
執行結果異常,報錯提示如下:
System.InvalidOperationException: Cannot set CommandText while a DataReader is active
【分析原因】 讀取操作與更新或刪除操作不可以放在同一個資料庫會話中
【解決方法】 將查詢操作、更新或刪除使用獨立的資料庫會話,程式碼如下:
IQuerable<T> infoList = null; using (SqliteDB db = new SqliteDB(connectionString)) { infoList = db.[表物件].where(x => x.attr == condition); } if (infoList != null && infoList.Count() > 0) { using (SqliteDB db = new SqliteDB(connectionString)) { foreach ([表物件] info in infoList) { deleteCount += db.Delete<[表物件]>(info); } if (deleteCount != infoList.Count()) { result = false; } } }