如何使用C#ASP.net MVC 5

时间:2016-02-03 20:02:10

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

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

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

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

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

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

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

    现在,我创建了另外3个模型,我想要做的是为每个模型创建一个单独的迁移,以保持代码分离。

    所以我想我会在第2步重新开始,所以

    1. Add-Migration InitilizeModel2Table
    2. Add-Migration InitilizeModel3Table
    3. Add-Migration InitilizeModel4Table
    4. Database-Update
    5. 但是命令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()
              {
      
              }
          }
      }
      

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

1 个答案:

答案 0 :(得分:1)

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

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

以下是描述代码优先迁移的couple resources

我绝不是EF专家,所以我可能会稍微关注一下。