すべて同じデータベースとモデルを使用する一連のデスクトップアプリケーション(C#、. NET Framework 4.7)を作成しています。Entity Framework6を使用してデータベースモデルをセットアップしています。重複するコード(モデル)を防ぐために、すべてのモデルを専用の「データベース」クラスに配置しました。このクラスでは、も定義しDbContext
ます。
EntityFramework
NuGetを介してパッケージを「データベース」クラスに追加すると、SQLServerLocalDBのEFデータベースプロバイダーも自動的にインストールされました。
さらに構成せずにアプリケーションを起動すると、SQLServer LocalDBが初期化され、データベース接続に使用されます。
「データベースエンドポイント」の構成について2つの懸念があります。
1)実際のアプリケーションでデータベース接続文字列を設定したい。したがって、異なるマシンで実行される可能性のあるすべてのアプリケーションは、同じデータベースサーバーを指す独自のデータベース接続文字列を持つことができます。
これを実現するためDbConext
に、「データベース」クラスの現在の値を次のように変更しました。
public class MyDbContext : DbContext
{
public MyDbContext(string connectionString)
{
this.Database.Connection.ConnectionString = connectionString;
}
}
これで、一般的な「データベース」クラスではなく、アプリケーションを介してデータベース接続文字列を定義できます。
2)アプリケーションレベルでデータベースエンジンを定義したい。これにより、「データベース」クラスを「ジェネリッククラス」として作成し、アプリケーションでも使用する実際のEFデータベースプロバイダーを定義できます。
共通の「データベース」クラスとアプリケーションを変更して、使用するEFデータベースプロバイダーをアプリケーションに決定させるにはどうすればよいですか?
EFは、<connectionStrings>
セクションを使用してapp.config /web.configを介してこれをすぐにサポートします。
アプリケーションapp.configに、以下を追加します。
次に、DbContextクラスで:
public class MyDbContext : DbContext
{
public MyDbContext()
: base("ApplicationDatabase")
{ }
public MyDbContext(string connectionString)
: base(connectionString)
{ }
}
このように、各クライアントインスタンスは、WindowsアプリケーションのMyApplication.exe.configファイルの「ApplicationDatabase」接続文字列を調整することにより、実行時に接続文字列をカスタマイズできます。上記のコードは、接続文字列/設定が提供されていない場合、デフォルトで「ApplicationDatabase」接続文字列になります。または、特定の接続文字列または接続文字列設定で接続文字列を作成できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加