【问题标题】:How to create a single migration for a specific model using C# ASP.net MVC 5如何使用 C# ASP.net MVC 5 为特定模型创建单个迁移
【发布时间】:2016-05-13 05:04:39
【问题描述】:

我正在尝试使用 ASP.NET MVC 5 开发一个小型应用程序。

我正在使用具有代码优先方法的实体框架。

首先,我创建了我的第一个模型,然后按照以下步骤在数据库中创建表

  1. 我打开了包管理器控制台
  2. 我执行了Enable-Migrations
  3. 我执行了Add-Migration InitilizeModel1Table
  4. 最后,创建表我执行Database-Update

在第 3 步中创建了一个名为 datetime_InitilizeModel1Table 的迁移,它创建了将自动创建表的代码。

在第 4 步中,它应用了 create table 命令并按预期在数据库中创建了表。

现在,我又创建了 3 个模型,我喜欢为每个模型创建一个单独的迁移,以保持我的代码分离。

所以我想我会从第 2 步重新开始,所以接下来

  1. Add-Migration InitilizeModel2Table
  2. Add-Migration InitilizeModel3Table
  3. Add-Migration InitilizeModel4Table
  4. Database-Update

但是Add-Migration InitilizeModel2Table 命令正在创建一个没有创建表所需代码的空迁移。

这是一个例子

namespace App.Migrations
{
    using System;
    using System.Data.Entity.Migrations;

    public partial class InitilizeModel2Table : DbMigration
    {
        public override void Up()
        {

        }

        public override void Down()
        {

        }
    }
}

如何为每个模型创建新的迁移,而无需手动编写迁移脚本来创建表?

【问题讨论】:

  • 如果您想为每个模型单独迁移,您必须一次添加一个,并在每次创建之间创建一个迁移。 EF 显然没有选择您的新模型,您是否以与原始模型相同的方式创建它们?
  • 我相信我做到了。我所做的只是右键单击模型文件夹,添加新的,类。他们输入了班级名称。
  • 您是否将新模型添加到您的上下文中?
  • @SvenGrosen 我没有 :) 这就是它创建空迁移的原因 :) Add-Migration 命令如何知道在创建迁移时选择哪个模型?它会寻找任何没有迁移并创建它的东西吗?所以如果我一次在上下文类中放置一个模型,我会为每个模型获得一个迁移类?
  • Add-Migration 将查找 EF 不知道的所有更改。关于您关于每个模型进行一次迁移的问题,是的,这是我的理解。

标签: asp.net-mvc entity-framework asp.net-mvc-4 asp.net-mvc-5


【解决方案1】:

这里的问题是您没有将模型添加到上下文中,因此 EF 没有检测到更改。

EF 通过__MigrationHistory 表/迁移文件本身将模型的状态链接到迁移。它将__MigrationHistory 中的最新值与您的上下文的当前状态进行比较,如果它们不同,则在您运行Add-Migration X 时将创建一个新的非空迁移。

这是resources 中的couple 描述代码优先迁移。

我绝不是 EF 专家,所以我可能会稍微偏离这里的细节。

【讨论】:

    猜你喜欢
    • 2016-11-22
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 2019-11-29
    相关资源
    最近更新 更多