尝试运行 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:
命名空间 mynamespace { 内部密封类 App : DbMigrationsConfiguration { public App() { AutomaticMigrationsEnabled = false; 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)
{
}
}
}