我正在尝试使用自定义DbContext运行迁移。
var migrationConfiguration = new DbMigrationsConfiguration { AutomaticMigrationsEnabled = true };
migrationConfiguration.ContextType = typeof(DataContext);
var migrator = new DbMigrator(migrationConfiguration);
migrator.Update();
这会引发迁移异常,因为DataContext
没有实现无参数构造函数:
目标上下文'System.Data.Entity.DbContext'不可构造。添加默认构造函数或提供IDbContextFactory的实现。
DataContext
构造函数需要参数,但我已经创建了IDbContextFactory<DataContext>
。如何告诉DbMigrator使用IDbContextFactory<DataContext>
的现有实现?
答案 0 :(得分:4)
IDbContextFactory<>
位于同一个程序集中,并提供无参数构造函数。
另一种方法是继承DbConfiguration并在派生类的无参数构造函数中设置工厂(我使用MEF来获取从IDbContextFactory派生的类):
public class DataContextConfiguration : DbConfiguration
{
public DataContextConfiguration()
{
SetContextFactory(() => (DataContext)new CompositionManager().Container.GetExportedValue<IDataContextFactory>().Create());
}
}