我们在多个站点中大量使用 Entity Framework 4.3 和基于代码的 .NET 4.0 项目,一切运行顺利、快速且无错误,但为了实现 Entity Framework 团队所做的最后一次速度改进,我们现在计划升级到 EF6 和.NET 4.5
在修改了几个 using 子句后(由于最新版本中的命名空间更改),如果从空数据库开始,一切似乎都可以正常工作,但是一旦 Context() 构造尝试打开现有客户数据库,就会出现异常发生了,显然基于代码的迁移有问题。
我的基于代码的迁移配置如下:
internal sealed class Configuration : DbMigrationsConfiguration<Context>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
}
使用此应用程序初始化程序 (program.cs)
Database.SetInitializer(new MigrateDatabaseToLatestVersion<Context, Configuration>());
Database.DefaultConnectionFactory = new UniversalDbConnection();
将 UniversalDbConnection 声明为
class UniversalDbConnection : IDbConnectionFactory
{
public DbConnection CreateConnection(string givenString)
{
switch (Preferences.DatabaseVendor)
{
case ConnectionPreset.PostgreSQL:
return new PgSqlConnection(Preferences.ConnectionString);
default:
SqlConnectionFactory factory = new SqlConnectionFactory(Preferences.ConnectionString);
return factory.CreateConnection(Preferences.ConnectionString);
}
}
}
不幸的是,一个异常声明: 对象“FK_StockTests_FormulaSteps_Step_Id”依赖于列“Step_Id”。ALTER TABLE DROP COLUMN Step_Id 失败,因为出现了一个或多个对象访问此列