【发布时间】:2016-04-24 02:35:30
【问题描述】:
所以我已经设法从我的 Entity Framework Code First 模型类创建了一些数据库表。更改这些模型类并再次运行我的代码后,我得到了这个异常:
System.Data.Entity.Migrations.Infrastructure.MigrationsException:目标上下文“...上下文”不可构造。添加默认构造函数或提供 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 实例上运行自动迁移?
【问题讨论】:
标签: c# .net entity-framework