Entity Framework 5 (EF5) を使用して POCO から SQL Server CE 4.0 データベースを生成する .NET 切断型クライアント サーバー アプリケーションを構築しています。このアプリケーションにより、ユーザーはネットワーク SQL Server からクライアントの SQL Server CE データベースにデータの一括コピーを実行できます。これは、EF5 によって作成された制約とインデックスのために、非常に (非常に) 遅くなります。制約とインデックスを一時的に削除すると、30 分の待ち時間が 1 分以下に短縮されます。
一括コピーを開始する前に、アプリケーションはクエリを実行して、SQL Server CE テーブルから制約とインデックスを削除します。ただし、EF5 で作成された制約名にはテーブル スキーマ名、ドット、およびテーブル名が含まれているため、コマンドは失敗します。構文解析の問題が原因で、制約名のドットがドロップ コマンドの失敗の原因になっています。
たとえば、POCOは主キー制約を持つCustomer
テーブルを作成します。データベースは期待どおりに動作します。dbo.Customer
PK_dbo.Customer_Id
ただし、クエリ以外の実行時:
ALTER TABLE Customer DROP CONSTRAINT PK_dbo.Customer;
SQL Server Compact ADO.NET データ プロバイダーが次のエラーを返します。
クエリの解析中にエラーが発生しました。
[トークン ライン番号 = 1、トークン ライン オフセット = 57、トークン エラー = . ]
もちろん、DataContext
外部キーを持たないセカンダリ オブジェクトを使用すると、制約なしでデータベースが生成され、後でそれらを追加できます。ただし、それには 2 つのDataContext
オブジェクトを維持する必要があり、できれば両方を更新することを忘れないでください。したがって、次の 2 つの解決策のいずれかを探しています。
DROP ステートメントは、. 文字が解析されます
EF5 が を使用できないようにします。制約名とインデックス名の文字
よろしくお願いします。