好的,当我尝试查询主键(如果实体中的主键设置为“自动生成值”)时,我已经确认只有这个问题 - 但如果没有这个,我该如何插入?抱歉,如果这是一个 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()。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top