【发布时间】:2012-07-04 09:05:56
【问题描述】:
我在尝试运行 EF 4.3.1 add-migrations 命令时遇到错误:
“支持 ... 上下文的模型自数据库创建以来已更改”。
这是一个出现错误的序列(尽管我已经尝试了十几个变种,但也都失败了)...
1) 从一个由 EF Code First 创建的数据库开始(即,已经包含一个只有 InitialCreate 行的 _MigrationHistory 表)。
2)此时应用的代码数据模型和数据库是同步的(数据库是应用启动时CF创建的)。
3) 因为我的“服务”项目中有四个 DBContext,所以我没有运行“启用迁移”命令(它不处理多重上下文)。相反,我在 Services 项目和 Configuration.cs 文件中手动创建了 Migrations 文件夹(包含在本文末尾)。 [我想我在某处的帖子中读到了这个]
4) 在数据库尚未更改且应用停止的情况下,我使用 VS EDM 编辑器对我的数据模型进行了微小的更改(向现有实体添加一个属性),并让它生成新类 (但显然不修改数据库)。然后我重建解决方案,一切看起来都不错(当然,不要删除数据库或重新启动应用程序)。
5) 我运行以下 PMC 命令(其中“App”是 Configuration.cs 中某个类的名称):
PM> add-migration App_AddTrivial -conf App -project Services -startup Services -verbose
...失败并显示“模型...已更改。考虑使用代码优先迁移...”错误。
我做错了什么?还有其他人是否看到工具中的讽刺意味,告诉我使用我已经尝试使用的东西;-)
从 EF CF 创建的数据库开始设置解决方案的正确步骤是什么?我看过帖子说要使用 -ignorechanges 运行初始迁移,但我已经尝试过了,但没有帮助。实际上,我整天都在测试各种排列,但没有任何效果!
我一定是在做一些非常愚蠢的事情,但我不知道是什么!
谢谢,
爸爸猫
配置.cs:
命名空间我的命名空间 { 内部密封类 App : DbMigrationsConfiguration { 公共应用程序() { AutomaticMigrationsEnabled = 假; MigrationsNamespace = "Services.App.Repository.Migrations"; }
protected override void Seed(.Services.App.Repository.ModelContainer context)
{
}
}
internal sealed class Catalog : DbMigrationsConfiguration<Services.Catalog.Repository.ModelContainer>
{
public Catalog()
{
AutomaticMigrationsEnabled = false;
MigrationsNamespace = "Services.Catalog.Repository.Migrations";
}
protected override void Seed(Services.Catalog.Repository.ModelContainer context)
{
}
}
internal sealed class Portfolio : DbMigrationsConfiguration<Services.PortfolioManagement.Repository.ModelContainer>
{
public Portfolio()
{
AutomaticMigrationsEnabled = false;
MigrationsNamespace = "Services.PortfolioManagement.Repository.Migrations";
}
protected override void Seed(Services.PortfolioManagement.Repository.ModelContainer context)
{
}
}
internal sealed class Scheduler : DbMigrationsConfiguration<.Services.Scheduler.Repository.ModelContainer>
{
public Scheduler()
{
AutomaticMigrationsEnabled = false;
MigrationsNamespace = "Services.Scheduler.Repository.Migrations";
}
protected override void Seed(Services.Scheduler.Repository.ModelContainer context)
{
}
}
}
【问题讨论】:
-
您到底想达到什么目的? EF 迁移不支持将多个上下文处理到单个数据库 - 避免运行
Enable-Migrations不会改变它。通过 EDM 设计器创建类也不是代码优先。
标签: entity-framework-4.3 entity-framework-migrations