0

DBに移行を適用する単体テストでテストメソッドを作成しようとしています。だから私はしばらくグーグルで、DbMigratorクラスに関する情報を見つけました。EF 4.3 の使用例を次に示します。

var configuration = new Configuration();
var migrator = new DbMigrator(configuration);
migrator.Update();

私はEF 5.0を使用しているため、これは機能しませんでした。だから私はこのようなものを作りました:

DbMigrationsConfiguration configuration = new DbMigrationsConfiguration();
configuration.TargetDatabase = new DbConnectionInfo("***", "System.Data.SqlClient");
configuration.ContextType = typeof (EfContext);
//Dies here
var migrator = new DbMigrator(configuration);
migrator.Update();

しかし、例外がスローされます-これObject reference not set to an instance of an object. がスタックトレースです:

at System.Data.Entity.Migrations.Infrastructure.MigrationAssembly..ctor(Assembly migrationsAssembly, String migrationsNamespace)
at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext)
at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration)
at CloudAdNet.Testing.UnitTests.Test.SeedTest() in c:\Users\maris.vigulis\Documents\Visual Studio 2012\Projects\CloudAdNetSoftware\CloudAdNet.Testing.UnitTests\Test.cs:line 19

前進はありますか?

4

1 に答える 1

0

1)Configurationパブリッククラスとして作成します:

public sealed class Configuration : DbMigrationsConfiguration<YourContextClassHere>

2) 以下のコードを任意の場所に追加します。これにより、最新の移行が実行され、データベースが更新されます。

Configuration configuration = new Configuration();
configuration.ContextType = typeof(YourContextClassHere);
var migrator = new DbMigrator(configuration);

//This will get the SQL script which will update the DB and will write it to debug
var scriptor = new MigratorScriptingDecorator(migrator);
string script = scriptor.ScriptUpdate(sourceMigration: null, targetMigration: null).ToString();
Debug.Write(script);

//This will run the migration update script and will run Seed() method
migrator.Update();
于 2013-06-27T09:17:08.837 に答える