5

必要なパラメーターなしのコンストラクターのベースに名前または接続文字列をハードコーディングせずに、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 などを使用することを期待していました。

ヘルプやフィードバックは大歓迎です。

前もって感謝します、

ウィルコ

4

1 に答える 1

0

可能です はいこちらの回答をご覧ください この質問にはテストプログラムも含めました。

于 2013-05-21T07:39:01.440 に答える