首页 文章

如何在使用Entity Framework 6.1和MVC 5从数据库中使用Code First后同步模型?

提问于
浏览
51

假设

  • 使用EF 6.1,MVC 5,VS 2013,C#

  • 我有一个在Toad DM for SQL Server中设计的现有数据库模型,并且保持它始终更新非常重要

步骤和注释

  • 使用ADO.NET实体数据模型我选择 Code First from Databasenew feature in EF 6.1 )来生成模型 . 注意:模型类和DbContext类成功生成但 NO .edmx or .tt file was generated .

  • 接下来我添加了一个新的脚手架项目:MVC 5控制器和视图,使用实体框架 . 注意:生成成功,控制器和视图

问题

从现在开始,我不想使用Code First来更新我的数据库 . 相反,我希望根据数据库更改来更新模型 . 接下来做什么?如果我没有edmx文件,我将无法从数据库更新我的模型类?

4 回答

  • 8

    实体数据模型向导's Code First from Database does an excellent job creating your entity classes, as if they were created in the Code First style. What you are asking is if there is any way to keep these classes up-to-date as your database changes, similar to the EDMX style 1347074 . From what I' ve使用内置工具无法对此进行研究 . 但是,这是我发现有用的一种解决方法:

    假设我有一个带有产品表和客户表的数据库 . 最初我创建了一个StoreDBContext类,并选择了产品作为我的对象之一 . 现在我想将customer表作为新实体添加到现有上下文中 . 以下是使用Code First向导执行此操作的方法:

    • 创建一个新的实体数据模型,称之为StoreDBContextTemp或其他
      Add new item

    • 首先从数据库向导选项中选择代码
      code first from database

    • 选择客户作为要添加的对象(仅限客户)并完成向导
      add table

    • 打开新创建的上下文文件 StoreDBContextTemp.cs ,并复制新添加的实体的虚拟属性:

    public virtual DbSet<Customer> Customers {get; set;}

    • 将这些新属性粘贴到Original StoreDBContext.cs dbcontext类中 .

    • 删除StoreDBContextTemp.cs,并在app.config / web.confg等中删除StoreDBContextTemp的连接字符串 .

    • 您现在可以在StoreDBContext类上使用Customer

    如果添加或删除表,则需要手动调整字段,但每次将新表添加到模型时,至少不需要手写几十个属性 .

  • 44

    还有一个选项是从项目中删除自动生成的类,然后再次生成它们 . 虽然我们只需遵循这种方法,但我们需要确保我们应该为数据模型(继承自DbContext的类名)提供与前一个相同的名称 . 数据模型名称在下面突出显示

    Data Model Name

  • 4

    三件事 .

    • 使用Code First时没有.edmx .

    • 如果使用代码优先迁移,则必须首先编写代码,然后将更改迁移到数据库 . 这有助于您使代码更有条理,而无需生成代码,这是一个优势 .

    • Visual Studio中有一个插件可以做相反的事情 . 实体框架PowerTools允许您选择数据库并将其映射到对象 .

    https://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d

  • 3

    还有一件事要添加到Brian Vander Plaats的回答中 . 在步骤4中,您还需要复制新StoreDBContextTemp.cs / OnModelCreating方法中的任何内容,并将其添加到现有的StoreDBContext.cs / OnModelCreating中 . 否则,在删除新的上下文类时,您将丢失这些配置 .

相关问题