8

データベースが存在しない場合は、EFコードの最初の移行を使用してデータベースを構築しようとしています。これまでのところ、私はEnabled-Migrations成功しています。Add-Migrationsまた、データベースを構築する最初の移行を行ったこともあります。スクリプトは移行方向にあり、正しく見えます。

これは私の Main メソッドの本体です

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Configuration>());
var directConfigContext = new MyDbContext();

これが私が必要とするすべてであると言っている私が読んだすべてのもの. MyDbContextにありapp.config、次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <connectionStrings>
        <add name="MyDbContext" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=DbConfig;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
    </connectionStrings>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

さらに、EF が提供する DbMigrator クラスを使用すると、データベースは正しく構築されます (おそらく初期データベース移行スクリプトを使用します)。

// This is how it actually works including creating the database if it doesn't exist.
var dbMigrator = new DbMigrator(new Configuration());
dbMigrator.Update();

私が理解していることから、イニシャライザをオンに設定しMyDbContext、その後DbContext、データベースを最新の移行に作成する必要があるインスタンス化...何が欠けていますか?

4

2 に答える 2

9

DbContext をインスタンス化しても、それにバインドされた初期化子は実行されません。代わりに、データベースを更新するか、基礎となるデータベースの初期化子を直接呼び出す必要があります。

MyDbContext.MyEntity.Add(new MyEntity { Name = "Nelson" });
// Or
MyDb.Context.Database.Initialize(true); // force the initialization
于 2013-03-25T22:41:28.113 に答える
1

受け入れられた答えは他の人の問題を解決しますが、私は別の理由で同じ問題を抱えていました.データベースを削除し、DbContext.

アプリケーションを実行し、インスタンス化して を初めて使用しようとしたDbContextとき、 で行った最後の変更が最後の移行に反映されていなかったため、データベースは作成されませんでしたDbContext。この問題を解決するために、パッケージ マネージャー コンソールでコマンドを実行して新しい移行を追加するだけAdd-Migrationで、次回アプリケーションを起動したときに、データベースが正しく作成され、sed されました。

于 2015-07-07T16:33:57.430 に答える