1. 程式人生 > >C# linq2db操作sqlite進行刪除操作時異常

C# linq2db操作sqlite進行刪除操作時異常

【問題描述】 在對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;
		}
	}
}