2

OK、エンティティの主キーが「自動生成値」に設定されている場合に主キーを照会しようとすると、この問題のみを確認しましたが、これがないと、どのように挿入できますか? これが初心者のlinq2sqlである場合は申し訳ありませんが、私はそれを使い始めたばかりです。

このオプションをオフにしてLinq to Sqlを使用するにはどうすればよいですか?また、dbにpkを処理させますか? 割り当てる必要がある pk を取得するために毎回 qry する必要はありません...

誰かが私を助けてくれることを願っています。私のプロジェクトの 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 が '自動生成値' として設定されていることを忘れていました -- これに設定したのは、SQL で自動インクリメントを実行しているためで、これが ID 列です。

4

4 に答える 4

3

pkID はどのように実装されますか? 何らかの形で再帰的である可能性はありますか?

于 2009-06-22T14:56:12.847 に答える
1

それはLINQ 4.0で修正されたバグでした

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

クエリの安定性 Contains が自己参照 IQueryable を検出し、スタック オーバーフローを引き起こさないようになりました

.NET 3.5 で問題を解決するには: 「Auto Generated Value」= True を使用する場合、「Delay Loaded」を False に設定する必要があります。そうしないと、再帰エラーが発生します。

于 2009-07-21T01:37:30.517 に答える
1

これTake(1)は実際には何も実行しないため、作業は私を驚かせません (データが反復されるまで延期されます)。

これは興味深い問題です。SingleOrDefault(x=>x.ID == id)実際には内部で異なる処理が行われているためです。これは、これを主キー検索として認識し、最初に ID マネージャーをチェックします。

編集壁を越えたものとして、試し.Where(x=>x.ID == id).SingleOrDefault()-バグ(前のリンク)によると、これは4.0が出荷されるまでIDルックアップトリックを使用しません。

私は疑問に思うことから始めます:

  • ID ゲッター/セッターに奇妙な点はありますか (コードを追加しましたか?)
    • この型の部分クラスで何かしましたか?
  • それは継承チェーンの一部ですか?
    • もしそうなら、あなたは親型の部分クラスをいじりましたか?
  • 爆発したときにコールスタックウィンドウに何かが表示されますか?
于 2009-06-22T14:55:47.590 に答える
0

データテーブルが大きすぎます!

編集。MyDataTable は本当に DataTable ですか? それとも、実際には LINQ to SQL Table<...> ですか? その場合は、AsQueryable() を削除します。

于 2009-06-22T14:55:23.567 に答える