查询对象时 linq to sql + stackoverflow 异常
-
06-07-2019 - |
题
好的,当我尝试查询主键(如果实体中的主键设置为“自动生成值”)时,我已经确认只有这个问题 - 但如果没有这个,我该如何插入?抱歉,如果这是一个 linq2sql 菜鸟,但我刚刚开始使用它。
如何在关闭此选项的情况下使用 Linq to Sql,同时让数据库处理 pk?我不想每次都必须询问我应该分配的PK...
我希望有人可以帮助我,我完全无法在我的一个项目中使用 linq to sql,不太确定该怎么做......这是一个示例,该行抛出 StackOverflow 异常。
MyDataContext dc = new MyDataContext(ConnStr);
var obj = dc.MyDataTable.AsQueryable().SingleOrDefault(a => a.pkID == 4);
-- 第二行抛出 StackOverflow 异常。
这是使用相同数据上下文的另一个示例
var o = dc.MyDataTable.Take(1); <-- works fine
var abc = o.ToArray(); <-- unable to evaluate, debugger stops
我可以尝试什么想法吗?我似乎可以在同一解决方案的另一个项目中使用 linq to sql 。
- 更新 - 我忘了提到这个特定的实体“ myDataTable”将PK集作为“自动生成的值”,我将其设置为此原因,因为我让SQL执行自动增量,这是身份列。
解决方案
如何实施pkID?它有可能以某种方式递归吗?
其他提示
这 Take(1)
工作并不让我感到惊讶,因为这并没有真正执行任何东西(它被推迟到数据被迭代为止)。
这是一个有趣的问题——尤其是因为 SingleOrDefault(x=>x.ID == id)
实际上有 不同的处理 在内部 - 它将其识别为主键查找并检查身份管理器 第一的.
编辑 作为一个古怪的事情,尝试 .Where(x=>x.ID == id).SingleOrDefault()
- 根据错误(上一个链接),在 4.0 发布之前不会使用身份查找技巧。
我首先想知道:
- ID getter/setter 中是否有任何奇怪的地方(您添加了代码吗?)
- 你完成了吗 任何事物 在这种类型的部分类中?
- 它是继承链的一部分吗?
- 如果是这样,您是否为父类型设置了部分类?
- 当它爆炸时,你在调用堆栈窗口中得到任何东西吗?
这是在LINQ 4.0中纠正的错误
http:// damieng的.com /博客/ 2009/06/01 / LINQ到SQL的变化 - 在净40
查询稳定性包含现在检测到自引用IQueryable并且不会导致堆栈溢出
在.NET 3.5中解决问题:当使用“Auto Generated Value”= True时,必须将“Delay Loaded”设置为False - 否则会出现递归错误。
你的数据表太大了!
编辑。 MyDataTable真的是DataTable吗?或者它实际上是LINQ to SQL Table <!> lt; ... <!> gt; ?如果是这样,请删除AsQueryable()。