必要なパラメーターなしのコンストラクターのベースに名前または接続文字列をハードコーディングせずに、EF の移行を機能させるにはどうすればよいでしょうか?
EF の移行により、デフォルトのコンストラクターをカスタム dbcontext に追加する必要があります。dbcontext のベースで、nameorconnectionstring を指定する必要があります。
public class CustomDbContext : DbContextBase
{
public CustomDbContext ()
: base("theconnectionstringwedontwanttoset") //hardcoded connection string
{
}
コンストラクターをハードコーディングする必要があるという事実は、クライアント アプリケーションでは構成ファイルなしで動作し、多くの異なるデータベース (サーバー、ローカル SQL コンパクト) に接続しているため、接続を動的に構築するため、処理できないものです。
DbMigrationsConfiguration クラスを調査した後、コンストラクターで設定できる TargetDatabase という名前の DbConnectionsInfo プロパティを見つけました。しかし、この解決策でさえうまくいきませんでした。これは私がしたことです:
public sealed class Configuration : DbMigrationsConfiguration<CustomDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
//Setting the TargetDatabase in the hope it will use it in the migration
TargetDatabase = new DbConnectionInfo("Server=xxx;Database=xxx;Trusted_Connection=True", "System.Data.SqlClient");
}
public class MigrationInitializer : MigrateDatabaseToLatestVersion<CustomDbContext, Configuration>
{
}
最終的に Activator.CreateInstance が DbMigrator 内で使用されることがわかり、このクラスから TargetDatabase.Create などを使用することを期待していました。
ヘルプやフィードバックは大歓迎です。
前もって感謝します、
ウィルコ