【问题标题】:Entity Framework 4.3.1 add-migration error: "model backing the context has changed"Entity Framework 4.3.1 add-migration 错误:“支持上下文的模型已更改”
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-08-24
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多