次の方法で共有


トラブルシューティング

次の情報は、LINQ to SQL アプリケーションで発生する可能性のあるいくつかの問題を公開し、これらの問題の影響を回避または軽減するための提案を提供します。

その他の問題については、「 よく寄せられる質問」を参照してください。

サポートされていない標準クエリ演算子

LINQ to SQL では、すべての標準クエリ演算子メソッド (たとえば、 ElementAt) がサポートされているわけではありません。 その結果、コンパイルするプロジェクトでもランタイム エラーが発生する可能性があります。 詳細については、「 標準クエリ演算子の変換」を参照してください。

メモリの問題

クエリにインメモリ コレクションと LINQ to SQL Table<TEntity>が含まれる場合、2 つのコレクションが指定されている順序に応じて、クエリがメモリ内で実行される可能性があります。 クエリをメモリ内で実行する必要がある場合は、データベース テーブルのデータを取得する必要があります。

この方法は非効率的であり、メモリとプロセッサの使用量が大幅に増加する可能性があります。 このようなマルチドメイン クエリを回避してください。

ファイル名と SQLMetal

入力ファイル名を指定するには、入力ファイルとしてコマンド ラインに名前を追加します。 接続文字列にファイル名を含め ( /conn オプションを使用)、サポートされていません。 詳細については、「 SqlMetal.exe (コード生成ツール)」を参照してください。

クラス ライブラリ プロジェクト

オブジェクト リレーショナル デザイナーは、プロジェクトの app.config ファイルに接続文字列を作成します。 クラス ライブラリ プロジェクトでは、 app.config ファイルは使用されません。 LINQ to SQL では、デザイン時ファイルに指定された接続文字列が使用されます。 app.configの値を変更しても、アプリケーションが接続するデータベースは変更されません。

連鎖削除

LINQ to SQL では、連鎖削除操作はサポートも認識もされません。 テーブルに対する制約がある行を削除する場合は、次のいずれかの操作を行う必要があります。

  • データベースの外部キー制約で ON DELETE CASCADE 規則を設定します。

  • 独自のコードを使用して、親オブジェクトが削除されないようにする子オブジェクトを最初に削除します。

このような操作を行わない場合、SqlException 例外がスローされます。

詳細については、「 方法: データベースから行を削除する」を参照してください。

式はクエリ不可能

"式 [式] がクエリ可能ではありません。アセンブリ参照がありませんか?" というエラーが表示される場合は、次の項目を確認してください。

  • アプリケーションが .NET Compact Framework 3.5 を対象としています。

  • System.Core.dllSystem.Data.Linq.dllへの参照があります。

  • Imports (Visual Basic) またはusing (C#) のSystem.LinqSystem.Data.Linqディレクティブがあります。

DuplicateKeyException

LINQ to SQL プロジェクトのデバッグの過程で、エンティティの関係を走査する場合があります。 そうすることで、これらの項目がキャッシュに取り込まれるので、LINQ to SQL はその存在を認識します。 その後、同じキーを持つ複数の行を生成する Attach または InsertOnSubmit または同様のメソッドを実行しようとすると、 DuplicateKeyException がスローされます。

文字列連結例外

[n]textおよびその他の[n][var]charにマップされたオペランドの連結はサポートされていません。 2 つの異なる型セットにマップされた文字列を連結すると、例外がスローされます。 詳細については、「 System.String メソッド」を参照してください。

SQL Server 2000 のスキップと例外の取り込み

SQL Server 2000 データベースに対してIsPrimaryKeyまたはTakeを使用する場合は、ID メンバー (Skip) を使用する必要があります。 クエリは、単一のテーブル (結合ではなく) に対するクエリであるか、 DistinctExceptIntersect、または Union 操作である必要があり、 Concat 操作を含めてはなりません。 詳細については、「 標準クエリ演算子変換」の「SQL Server 2000 サポート」セクションを参照してください。

この要件は、SQL Server 2005 には適用されません。

GroupBy InvalidOperationException

この例外は、GroupByなどのboolean式でグループ化するgroup x by (Phone==@phone) クエリで列の値が null の場合にスローされます。 式はbooleanであるため、キーはbooleannullableではなくbooleanと推定されます。 変換された比較で null が生成されると、nullablebooleanbooleanを割り当てようと試みられ、例外がスローされます。

この状況を回避するには (null を false として扱う必要がある場合)、次のようなアプローチを使用します。

GroupBy="(Phone != null) && (Phone=@Phone)"

OnCreated() Partial メソッド

生成されたメソッド OnCreated() は、オブジェクト コンストラクターが呼び出されるたびに呼び出されます。これには、LINQ to SQL がコンストラクターを呼び出して元の値のコピーを作成するシナリオが含まれます。 独自の部分クラスに OnCreated() メソッドを実装する場合は、この動作を考慮してください。

こちらも参照ください