如何使用Entity Framework来使用现有数据库,如何使用迁移在数据库版本之间切换?

时间:2013-12-13 21:49:48

标签: entity-framework ef-migrations

问题:

您有一个要与EntityFrameworks一起使用的现有数据库,以便您可以通过类进行数据库更改。您还希望能够使用迁移功能在数据库版本之间切换。

不幸的是,这不适用于现有数据库的开箱即用,但您可以使用反向POCO生成器对数据库进行反向工程,就像从头开始编写数据库一样。

希望我的分步解决方案能让其他人受益,我相信我会在6个月后再次提及它。

1 个答案:

答案 0 :(得分:3)

  1. 创建名为MyEF(类库项目)的新项目

  2. here或在Visual Studio菜单“工具”|“扩展和更新”菜单中安装 EntityFramework Reverse POCO生成器。选择在线| Visual Studio库|模板| Visual C#|数据库,安装EntityFramework Reverse POCO generator

  3. 使用Package Manager控制台,按Install-Package EntityFramework

  4. 安装EntityFramework
  5. 使用模板添加名为MyDB.tt的新C#项:EntityFramework Rever POCO Code First Generator

  6. 将connectionStrings部分添加到app.Config类并指向您的数据库。

  7. e.g。

    <connectionStrings>
       <add name="DefaultConnection" connectionString="Data Source=CP8;Initial Catalog=TestDB;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False;" providerName="System.Data.SqlClient" />
    </connectionStrings>
    
    1. 在文件MyDB.tt中,将“MyDbContext”更改为“DefaultConnection”或您的连接名称。保存TT文件和反向POCO生成器将对数据库进行反向工程,并为您构建代码优先类。

    2. 如果您的数据库有_MigrationHistory表,请将其删除!

    3. 在包管理器控制台(PMC)中发出以下内容

      启用 - 迁移-EnableAutomaticMigrations -Force add-migration Initial

      1. 转到迁移文件夹,并使用
      2. 替换XXX_Initial.cs类的内容

        命名空间MyEf.Migrations {     使用系统;     使用System.Data.Entity.Migrations;

        public partial class Initial : DbMigration
        {
            public override void Up()
            {           
            }
        
            public override void Down()
            {
            }
        }
        

        }

        1. 从PMC发出:update-database

        2. 通过编辑将MyDb.cs中的新属性添加到MyTable类来更改模型:

        3. // MyTable 公共课MyTable {     public int Id {get;组; } // Id(主键)     public string Name {get;组; } // 名称     public string Sex {get;组; } //性别     public int?年龄{得到;组; } //年龄     公共布尔AmIAwesomeOrWhat {get;组; } }

          1. 重建解决方案

          2. 发出命令以保存新迁移,并更新数据库

          3. 添加迁移MyNewProperty 更新的数据库

            以下命令将切换到您想要的任何迁移。

            update-database -targetmigration:Initial
            update-database -targetmigration:MyNewProperty