オブジェクトを照会するときのlinq to sql + stackoverflow例外
-
06-07-2019 - |
質問
OK、エンティティのプライマリキーが「自動生成値」に設定されている場合、プライマリキーでクエリを実行するときにのみこの問題を確認しましたが、これがない場合、どのように挿入できますか?これがnoob linq2sqlの場合は申し訳ありませんが、作業を開始したばかりです。
どのようにこのオプションをオフにしてLinq to Sqlを使用し、dbでpkを処理するのですか?私は割り当てなければならないpkを取得するために毎回質問しなければならないのが嫌です...
誰かが私を助けてくれることを願っています、私のプロジェクトの1つでlinq to sqlを完全に使用することはできません、何をすべきか本当にわかりません...ここに例があり、この行はStackOverflow例外をスローします。
MyDataContext dc = new MyDataContext(ConnStr);
var obj = dc.MyDataTable.AsQueryable().SingleOrDefault(a => a.pkID == 4);
-その2行目はStackOverflow例外をスローします。
同じデータコンテキストを使用した別の例
var o = dc.MyDataTable.Take(1); <-- works fine
var abc = o.ToArray(); <-- unable to evaluate, debugger stops
私が試すことができるアイデアはありますか?同じソリューションの別のプロジェクトでlinq to sqlを使用しても問題ないようです。
-更新- この特定のエンティティ「MyDataTable」のpkが「Auto Generated Value」として設定されていることを忘れていました-この原因に設定しているので、自動インクリメントを実行しているsqlがあり、これがID列です。
解決
pkIDはどのように実装されますか?何らかの形で再帰的である可能性はありますか?
他のヒント
Take(1)
の動作は、実際には何も実行しないため(データが反復されるまで延期されます)、私を驚かせません。
これは興味深い問題です。特に、SingleOrDefault(x=>x.ID == id)
には実際に異なる処理内部-これを主キー検索として認識し、IDマネージャーを最初にチェックします。
編集 既成概念として、.Where(x=>x.ID == id).SingleOrDefault()
を試してください-バグ(以前のリンク)に従って、これはIDルックアップトリックを使用しません4.0が出荷されるまで。
疑問に思うことから始めます:
- ID getter / setterに奇妙な点はありますか(コードを追加しましたか?)
- このタイプの部分クラスで何かを実行しましたか?
- それは継承チェーンの一部ですか?
- そして、もしそうなら、親型の部分的なクラスを使用しましたか?
- 爆発したときにコールスタックウィンドウに何か表示されますか?
それは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に設定する必要があります。そうしないと、再帰エラーが発生します。
データテーブルが大きすぎます!
編集。 MyDataTableは本当にDataTableですか?または、実際にはLINQ to SQL Table <!> lt; ... <!> gt; ?その場合、AsQueryable()を削除します。