Pergunta

OK, eu confirmaram eu só esta questão quando tento consulta na chave primária, se essa chave primária na entidade é definida como 'Auto valor gerado' - mas w / o presente, como posso inserir? Desculpe se isso é uma linq2sql do noob, mas eu só comecei a trabalhar com ele.

Como se faz para usando LINQ to SQL com essa opção desativada, mas também têm a alça db o pk de? Eu odiaria ter que toda qry para obter o pk i deve atribuir ...

Espero que alguém possa me ajudar, im completamente incapaz de usar LINQ to SQL em um dos meus projetos, realmente não sei o que fazer ... aqui está um exemplo, esta linha gera uma exceção StackOverflow.

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

-. Essa segunda linha lança a exceção StackOverflow

Aqui está outro exemplo, usando o mesmo datacontext

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

Todas as idéias que eu possa tentar? I parecem estar bem usando LINQ to SQL em outro projeto na mesma solução.

- UPDATE-- Eu esqueci de mencionar que esta entidade particular 'MyDataTable' tem o conjunto pk como 'valor gerado Auto' - i tê-lo definido para esta causa eu tenho sql fazendo auto incremento e esta é a coluna de identidade

.
Foi útil?

Solução

Como é PKID implementado? Alguma chance é recursiva de alguma forma?

Outras dicas

O trabalho Take(1) não me surpreende, pois isso realmente não executar qualquer coisa (que é diferido até que os dados é iterativo).

Isso é um problema interessante - até porque o SingleOrDefault(x=>x.ID == id) realmente tem processamento diferente internamente -. reconhece isso como uma pesquisa de chave primária e verifica o gerente identidade início

Editar Como uma coisa off-the-wall, tente .Where(x=>x.ID == id).SingleOrDefault() - de acordo com o bug (link anterior), este não usa o truque de pesquisa identidade até 4.0 navios.

Eu seria começar por se perguntando:

  • há alguma coisa estranha na ID getter / setter (tem você adicionou código?)
    • que você fez qualquer em uma classe parcial para este tipo?
  • é parte de uma cadeia de herança?
    • e se assim for, você já brincou com uma classe parcial para o tipo de pai?
  • você conseguir alguma coisa na janela de chamada-stack quando explode?

Isso foi um bug corrigido no LINQ 4.0

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

estabilidade consulta contém agora detecta auto-referência IQueryable e não causar um estouro de pilha

Em .NET 3.5 para resolver o problema:. Ao usar 'Auto Gerado Valor' = True, em seguida, você deve definir 'Delay Loaded' to False - caso contrário você obter o erro recursão

A sua tabela de dados é muito grande!

Editar. MyDataTable é realmente um DataTable? Ou é realmente um LINQ to SQL Table <...>? Se assim for, remova o AsQueryable ().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top