1

任何提示如何关闭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 和 Position:

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 
)
4

2 回答 2

2

由于延迟加载(发生在foreach循环内部),此问题可能发生在您的情况下。它试图Position在循环的每次迭代中从数据库中加载每个。

Positions解决此问题的一种方法是使用急切加载在您的查询中一次获取所有内容。然后,如果您还使用贪婪操作(例如ToList()在查询结束时),则会执行数据库并一次性提取所有内容。在你的情况下尝试类似

var months = 
    (from month in connector.PositionInstance 
     where month.FeeNoticeMonth >= DateTime.Now.Month 
     select month).Include("Position").ToList();

或一些变化。在查询之后使用 useToList()会将变量类型months 为 a List(它是 an IEnumerable),其中包含来自数据库的填充结果;否则months将是IQueryable尚未执行的数据库查询。

于 2013-05-14T15:18:21.217 回答
1

try to add this in the connection string:

MultipleActiveResultSets=True

于 2013-04-10T13:07:48.280 回答