好的,我确认我只有这个问题当我尝试查询主键时,如果实体中的主键设置为'自动生成值' - 但是没有这个,我该如何插入?对不起,如果这是一个菜鸟linq2sql,但我刚开始使用它。
如何在关闭此选项的情况下使用Linq to Sql,还让db处理pk?我不想每次都要qry得到pk我应该分配......
我希望有人可以帮助我,我完全无法在我的一个项目中使用linq到sql,不确定要做什么...这是一个例子,这行会引发StackOverflow异常。
MyDataContext dc = new MyDataContext(ConnStr);
var obj = dc.MyDataTable.AsQueryable().SingleOrDefault(a => a.pkID == 4);
- 第二行抛出StackOverflow异常。
使用相同的datacontext
的另一个例子var o = dc.MyDataTable.Take(1); <-- works fine
var abc = o.ToArray(); <-- unable to evaluate, debugger stops
我能尝试的任何想法?在同一个解决方案中,我似乎可以在另一个项目中使用linq to sql。
- 更新 - 我忘了提到这个特定的实体'MyDataTable'将pk设置为'自动生成的值' - 我设置为这个因为我有sql做自动增量,这是标识列。
答案 0 :(得分:3)
如何实施pkID?它有可能以某种方式递归吗?
答案 1 :(得分:1)
Take(1)
工作并不让我感到惊讶,因为这并没有真正执行任何事情(它会延迟到数据被迭代)。
这是一个有趣的问题 - 尤其是因为SingleOrDefault(x=>x.ID == id)
内部实际上有different processing - 它将此识别为主键查找并检查身份管理器优先。
编辑 作为一个彻头彻尾的事情,尝试.Where(x=>x.ID == id).SingleOrDefault()
- 根据错误(上一个链接),这不使用身份查找技巧直到4.0发货。
我首先想知道:
答案 2 :(得分:1)
这是在LINQ 4.0中纠正的错误
http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40
查询稳定性包含现在检测到自引用IQueryable并且不会导致堆栈溢出
在.NET 3.5中解决问题:当使用“Auto Generated Value”= True时,必须将“Delay Loaded”设置为False - 否则会出现递归错误。
答案 3 :(得分:0)
你的数据表太大了!
编辑。 MyDataTable真的是DataTable吗?或者它实际上是LINQ to SQL表&lt; ...&gt; ?如果是这样,请删除AsQueryable()。