0

尝试运行 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)
    {

    }
}

}

4

1 回答 1

0

使用 EF 迁移时,每个数据库应该有一个数据上下文。我知道它可以变得非常大,但是通过尝试拆分它会遇到几个问题。一是您遇到的迁移问题。稍后,当您尝试从不同的上下文连接表时,您可能会遇到问题。不要那样做,这与 EF 的设计方式背道而驰。

于 2012-07-04T08:23:14.597 回答