使用Entity Framework进行显式自动迁移

时间:2015-07-27 13:43:20

标签: c# .net entity-framework

所以我设法从我的Entity Framework Code First模型类创建了一些数据库表。更改这些模型类并再次运行我的代码后,我遇到了这个例外:

  

System.Data.Entity.Migrations.Infrastructure.MigrationsException:目标上下文'... Context'不可构造。添加默认构造函数或提供IDbContextFactory的实现。

不幸的是,数据库连接参数是在运行时确定的,具体取决于用户选择。因此没有默认或静态连接字符串。只能通过代码逻辑建立连接。这是我需要用来使EF为我工作的众多黑客之一:

// Manually create database connection because Entity Framework won't let me specify a
// provider name together with a connection string.
// Source: http://stackoverflow.com/a/17403462/143684
var conn = DbProviderFactories.GetFactory("Oracle.ManagedDataAccess.Client").CreateConnection();
conn.ConnectionString = "User Id=" + dbUserName + ";Password=" + dbPassword + ";Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" + dbHostName + ")(PORT=" + dbPort + "))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=" + dbInstance + ")))";
var appContext = new AppContext(conn);

AppContext(我的DbContext)的唯一构造函数采用DbConnection参数。 AppContext的无参数构造函数将无法工作,因为它不知道连接到哪里。然而,迁移需要我的一个。

我在上面显示的代码之前调用它:(Configuration是PowerShell命令为我生成的代码。)

Database.SetInitializer(
    new MigrateDatabaseToLatestVersion<AppContext, Configuration>());

我可以以某种方式说服EF在我为其创建的AppContext实例上运行自动迁移吗?

1 个答案:

答案 0 :(得分:1)

您是否尝试过实施IDbContextFactory界面?

cookie.txt