Question

OK, i have confirmed i only this issue when i attempt to query on the primary key if that primary key in the entity is set to 'Auto Generated Value' -- but w/o this, how can i insert? Sorry if this is a noob linq2sql but i just started working with it.

How does one go about using Linq to Sql with this option turned off but also have the db handle the pk's? I would hate to have to qry everytime to get the pk i should assign...

I hope someone can help me out, im completely unable to use linq to sql in one of my projects, not really sure what to do... here is an example, this line throws a StackOverflow exception.

MyDataContext dc = new MyDataContext(ConnStr);
var obj = dc.MyDataTable.AsQueryable().SingleOrDefault(a => a.pkID == 4);

-- That second line throws the StackOverflow exception.

Heres another example using the same datacontext

var o = dc.MyDataTable.Take(1); <-- works fine
var abc = o.ToArray();  <-- unable to evaluate, debugger stops

Any ideas what i can try? I seem to be fine using linq to sql in another project in the same solution.

-- UPDATE-- I forgot to mention that this particular entity 'MyDataTable' has the pk set as 'Auto Generated Value' -- i have it set to this cause i have sql doing auto increment and this is the identity column.

Was it helpful?

Solution

How is pkID implemented? Any chance it's recursive in some way?

OTHER TIPS

The Take(1) working doesn't surprise me, as this doesn't really execute anything (it is deferred until the data is iterated).

That is an interesting problem - not least because the SingleOrDefault(x=>x.ID == id) actually has different processing internally - it recognises this as a primary-key lookup and checks the identity manager first.

EDIT As an off-the-wall thing, try .Where(x=>x.ID == id).SingleOrDefault() - as per the bug (previous link), this doesn't use the identity lookup trick until 4.0 ships.

I would be start by wondering:

  • is there anything odd in the ID getter/setter (have you added code?)
    • have you done anything in a partial class for this type?
  • is it part of an inheritance chain?
    • and if so, have you monkeyed with a partial class for the parent type?
  • do you get anything in the call-stack window when it explodes?

That was a bug corrected in LINQ 4.0

http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40

Query stability Contains now detects self-referencing IQueryable and doesn't cause a stack overflow

In .NET 3.5 to solve the problem: When using 'Auto Generated Value' = True, then you must set 'Delay Loaded' to False - otherwise you get the recursion error.

Your datatable is too big!

Edit. Is MyDataTable really a DataTable? Or is it actually a LINQ to SQL Table<...> ? If so, remove the AsQueryable().

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top