この問題を解決するために数日を費やしましたが、私の要件は非常に単純です。ほとんどの PC (DB サーバーがインストールされていない状態) で動作するデータベースを使用してアプリケーションを作成し、 LINQを使用したいと考えています。互換性の理由から、 .NET Framework 3.5を使用したいと考えています(すべての Windows 7 マシンに搭載されています)。
SQL Server CE と SQLite の 2 つの方法を試しました。
SQL サーバー CE
Visual Studio はコンパクト バージョンの SQL サーバーの LINQ をサポートしていませんが、Visual Studio から metal.exe ツールを使用して .dbml ファイルを生成し、それをプロジェクトにドラッグするという簡単な回避策を見つけました。私のアプリケーションは自分のマシンでは正常に動作しますが、別の場所にコピーするとクラッシュします。C:\Program Files (x86)\Microsoft SQL Server Compact Edition\3.5 からすべての dll をコピーし、4.0 も試しました。問題は、アプリがそのディレクトリ内で dll (参照) を探していないことだと思います。DataSets (LINQ なし) を使用して動作させることができました。SQLServerCE への参照を手動で追加し、CopyLocal を true にチェックします。しかし、LINQ を使用すると、プロジェクト参照に SQLServerCE への参照がなく、機能しています。変更方法がわかりません。それとも別の場所に問題がありますか?
SQLite
SQL Server CE をいじった後、SQLite を試してみました。.NET での SQLite サポートの貧弱さに非常に失望しています。古いバージョンの ADO.NET プロバイダーをダウンロードする必要がありました (新しいバージョンでは SQLite データベースが Visual Studio 2010 に追加されません。理由はわかりませんが、それが正常であることをグーグルで検索したため、古いバージョンをインストールしてから、新しい)。次に、dblinq をダウンロードし (後でこのプロジェクトが終了したことを発見しました)、dbmetal と dll をいじった後、Visual Studio でエラーを取り除き、アプリケーションをコンパイルしました。しかし、私はそれを実行できません.SQLiteサーバーがなかったように、常にエラー40でクラッシュします. もちろん、すべてのdllをコピーしました。開発マシンでも実行できません。
C# .NET で単純なデータベース アプリケーションを作成することはほとんど不可能であり、クライアントがサーバーなどに煩わされないことに非常に驚いています。
SQL CE を LINQ で動作させ、主にアプリを配布可能にした人はいますか?