在Visual Studio中添加新数据项时,EF 6.x DbContext Generator选项的用途

我有一个使用LINQ to SQL构建的Web应用程序,我希望将其升级到LINQ to Entity Framework。 我查看了一些教程,我学到的是基本上在数据库优先的场景中,您创建了一个ADO.NET实体数据模型。 从那里,您可以选择要包含在模型中的表(非常类似于LINQ to SQL)。

Add New Item对话框中,我看到有另一个选项可以创建EF 6.x DbContext Generator

Visual Studio“添加新项”对话框

ADO.NET实体数据模型 (对话框中的第一个选项)相比, EF 6.x DbContext Generator的用途是什么? 而且,什么是EF 6.x DbContext Generator ? 它似乎创建了一个文本文件。 我该怎么办?

如果您已经有了数据库,那么第一个选项会更好,因为该方法与您在LinqToSQL中使用的方法非常相似。 .EDMX文件还可以为您提供数据库的图形可视化,您不必担心其他任何问题。

DbContext Generator用更简单和更短的代码替换ObjectContext,以将Entity对象连接到数据库对象。 具有30个字段的单个数据库表由作为ObjectContext的大约800行代码表示,但是作为由DbContextGenerator生成的DbContext和类大约40行易于理解的代码。

DbContext Generator创建两个文件 –

  1. 使用连接字符串详细信息和每个表的DbSet创建DbContext。

  2. 创建表示每个表的类。 如果打开这些.tt文件夹,您将看到生成的DbContext和类。 您无需对这些类执行任何操作 – 您可以在Controller操作中引用它们。

有关演练,请访问http://msdn.microsoft.com/en-US/data/jj206878

我认为这是与EntityFramework和生成器相关的基本文章:

MSDN文章

以下是文章的介绍:

使用entity framework设计器创建模型时,将自动为您生成类和派生上下文。 除了默认代码生成之外,我们还提供了许多模板,可用于自定义生成的代码。 这些模板以T4文本模板的forms提供,允许您根据需要自定义模板。

通常, 这些生成器不会将 db模块从LinqToSQL 转换为EntityFramework。
如果您有完整的数据库(假设您将其作为基于Linq2SQL的模块)我建议您使用ADO.NET实体数据模型(添加新项目:EDMX)并选择“从数据库生成”(添加后的VS向导) 。

有两种方法可以做DB First,一种涉及EDMX文件,另一种涉及逆向工程以编写第一个POCO。

如果有EDMX文件,则安装用于生成实体的生成器,并且有多个选项。 一个是DbContext,另一个是EntityObject生成器,它基于ObjectContext生成对象。

第一个选项创建一个模型优先文件以使用EF(所有版本),如果您选择可以从现有数据库更新(或构造)您的EF模型,而如果选择第二个选项,您将获得生成设施相应的文件,以构建使用Code-First EF的解决方案。

根据我的经验,第二个选择不是一个值得选择的选项,如果您决定使用Code-First EF,强烈建议您打开一个干净的文件并自由编写代码并享受Code-First提供的最大灵活性和他们的惯例。