我花了两天时间绞尽脑汁解决这个问题,但似乎无法解决它(问题本身)。在我添加数据库关系之前,相同的代码运行良好,从那时起我就......
我花了两天时间绞尽脑汁解决这个问题,但似乎无法解决它(问题本身)。在我添加数据库关系之前,相同的代码运行良好,从那时起,我阅读了很多 有关 延迟加载的资料。
我有两个数据库表,它们之间有 1:1 的关系。 PromoCode
表跟踪代码,并且有一个名为 PK 列的 id
. CustomerPromo
链接到 PromoId
表的 PromoCode
列 id
。这两个表没有其他关系。我在 SQL Server Management Studio 中生成了所有这些,然后从数据库生成了模型。
为了让事情稍微复杂一点,我在 WCF 数据服务中执行此操作,但我认为这不会有什么不同(在添加数据库关系之前它可以工作)。启用日志记录后,我总是在日志文件中收到带有文本的异常:
Dispose 之后访问 DataContext。
我的函数当前返回表中的所有条目:
using (MsSqlDataContext db = new MsSqlDataContext())
{
// This causes issues with lazy-loading
return db.PromoCodes.ToArray();
}
我读过无数文章/页面/答案,他们都说要使用这个 .Include()
方法。但这对我来说不起作用:
return db.PromoCodes.Include(x => x.CustomerPromos).ToArray();
我也尝试过“魔术字符串”版本:
return db.PromoCodes.Include("CustomerPromos").ToArray();
我设法使之工作的唯一代码是这样的:
PromoCode[] toReturn = db.PromoCodes.ToArray();
foreach (var p in toReturn)
p.CustomerPromos.Load();
return toReturn;
我尝试过 .Where()
在查询中添加条件,尝试过 .Select()
,尝试过将移到 .Include()
后面 .Where()
( 这个答案 说最后这样做,但我认为这只是由于嵌套查询)。我读过关于 .Include()
将默默失败的 ,但经历了这一切,我还是没有更进一步。
我遗漏了什么?语法问题?逻辑问题?一旦我让这个 \'simple\' 案例工作起来,我还需要嵌套的 Include
s (即,如果 CustomerPromo
table 与 有关系 Customer
)。
编辑
包括 所有 相关代码。其余的是 LINQ to SQL 或 WCF 数据服务配置。这就是全部内容:
[WebGet]
[OperationContract]
public PromoCode[] Test()
{
using (MsSqlDataContext db = new MsSqlDataContext())
{
return db.PromoCodes.Include(x => x.CustomerPromos).ToArray();
}
}
如果我直接通过浏览器调用该函数(例如 http://<address>:<port>/DataService.svc/Test
),我会收到重置连接消息,并且必须查找 WCF 日志才能找到 \' DataContext accessed after Dispose.
\'。如果我通过网页中的 AJAX 调用进行相同的查询,我会收到带有状态的 AJAX 错误 error
(仅此而已!)。