[英]Another “There is already an open DataReader associated…”
有關如何關閉DataReader
任何提示? 我使用postgresql而MARS僅用於SQL。 或許我不需要MARS來解決這個問題,我不知道。 錯誤顯示在foreach循環中。 謝謝你的提示。
var months = (from month in connector.PositionInstance where month.FeeNoticeMonth >= DateTime.Now.Month select month);
foreach (PositionInstance p in months)
{
System.Windows.MessageBox.Show("" + p.First().Position.Name);
}
編輯:我有兩個表PositionInstance和位置:
CREATE TABLE "Position"
(
"PositionId" integer NOT NULL DEFAULT,
"Name" character varying(30) NOT NULL,
CONSTRAINT "PK_Position" PRIMARY KEY ("PositionId")
)
CREATE TABLE "PositionInstance"
(
"PositionInstanceId" integer NOT NULL DEFAULT,
"FeeNoticeYear" integer NOT NULL,
"FeeNoticeMonth" integer NOT NULL,
CONSTRAINT "PK_PositionInstance" PRIMARY KEY ("PositionInstanceId"),
CONSTRAINT "FK_Position_PositionInstance" FOREIGN KEY ("PositionId")
REFERENCES "Position" ("PositionId") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
由於延遲加載(在foreach
循環內部發生),您的情況可能會發生此問題。 它試圖在循環的每次迭代中從DB加載每個Position
。
解決此問題的一種方法是使用預先加載來在查詢中立即獲取所有Positions
。 然后,如果您在查詢結束時也使用諸如ToList()
類的貪婪操作,則執行DB並一次性拉出所有內容。 在你的情況下嘗試類似的東西
var months =
(from month in connector.PositionInstance
where month.FeeNoticeMonth >= DateTime.Now.Month
select month).Include("Position").ToList();
或一些變化。 在查詢之后使用ToList()
將輸入變量months
作為包含來自DB的填充結果的List
(這是一個IEnumerable
); 否則months
將是尚未執行的數據庫查詢的IQueryable
。
嘗試在連接字符串中添加:
MultipleActiveResultSets =真
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.