提供IDbContextFactory的实现。但是哪里?

时间:2016-05-27 12:27:13

标签: c# entity-framework ef-migrations

我正在尝试使用自定义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>的现有实现?

1 个答案:

答案 0 :(得分:4)

IDbContextFactory<>位于同一个程序集中,并提供无参数构造函数。

另一种方法是继承DbConfiguration并在派生类的无参数构造函数中设置工厂(我使用MEF来获取从IDbContextFactory派生的类):

public class DataContextConfiguration : DbConfiguration
{
    public DataContextConfiguration()
    {
        SetContextFactory(() => (DataContext)new CompositionManager().Container.GetExportedValue<IDataContextFactory>().Create());
    }
}