Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在VisualStudio中添加新数据项时EF 6.x DbContext生成器选项的用途_C#_Asp.net_Entity Framework_Linq_Linq To Sql - Fatal编程技术网

C# 在VisualStudio中添加新数据项时EF 6.x DbContext生成器选项的用途

C# 在VisualStudio中添加新数据项时EF 6.x DbContext生成器选项的用途,c#,asp.net,entity-framework,linq,linq-to-sql,C#,Asp.net,Entity Framework,Linq,Linq To Sql,我有一个使用LINQtoSQL构建的web应用程序,我希望将其升级到LINQtoEntity框架。我看了一些教程,学到的是基本上在database first场景中,创建ADO.NET实体数据模型。然后从中选择要包含在模型中的表(非常类似于LINQ到SQL) 在“添加新项目”对话框中,我看到另一个选项创建了一个EF 6.x DbContext生成器: 与ADO.NET实体数据模型相比,EF 6.x DbContext Generator的作用是什么(对话框中的第一个选项)?那么,EF 6.x

我有一个使用LINQtoSQL构建的web应用程序,我希望将其升级到LINQtoEntity框架。我看了一些教程,学到的是基本上在database first场景中,创建ADO.NET实体数据模型。然后从中选择要包含在模型中的表(非常类似于LINQ到SQL)

在“添加新项目”对话框中,我看到另一个选项创建了一个EF 6.x DbContext生成器:


与ADO.NET实体数据模型相比,EF 6.x DbContext Generator的作用是什么(对话框中的第一个选项)?那么,EF 6.x DbContext生成器的作用是什么?它似乎创建了一个文本文件。我该怎么处理它呢?

首先有两种方法来处理DB,一种涉及EDMX文件,另一种涉及反向工程来编码第一个POCO


当您有一个EDMX文件时,您可以安装用于生成实体的生成器,并且有几个选项。一个是DbContext,另一个是EntityObject generator,它基于ObjectContext生成对象。

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


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

如果您已经拥有数据库,第一种选择更好,考虑到该方法与您已经在LinqToSQL中使用的方法非常相似。
.EDMX文件还可以为您提供数据库的图形化可视化,您不必担心其他任何事情。

我认为这是有关EntityFramework和生成器的重要文章:

以下是文章的导言:

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

通常,这些生成器不会将数据库模块从LinqToSQL转换为EntityFramework。

如果您有完整的数据库(假设它是一个基于Linq2SQL的模块),我建议您使用ADO.NET实体数据模型(添加新项:EDMX)并选择“从数据库生成”(添加后的VS向导).

DbContext生成器用更简单、更短的代码替换ObjectContext,以将实体对象连接到数据库对象。一个包含30个字段的数据库表由大约800行代码表示为ObjectContext,但由大约40行易于理解的代码表示为DbContext和DbContextGenerator生成的类

DbContext生成器创建两个文件-

  • 为每个表创建带有连接字符串详细信息和DbSet的DbContext

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


  • 可以在

    上找到DbContext和EntityObject generator之间的区别吗?@frenchie-我说得很清楚,一个基于DbContext,另一个基于ObjectContext。@frenchie如果你问DbContext和ObjectContext之间的区别,它们是完全不同的。DbContext是这两个对象中较新的一个,它允许您使用“普通的旧C#Objects”。之所以将其称为“DbContext”,是因为上下文对象(类似于dataset)是DbContext类,而不是ObjectContext类。您在EntityFramework中看到的大多数功能演示都涉及DbContext。将实体公开为datacontract对EF6.x来说仍然是一个问题吗?通过按名称而不是顺序引用“第一个选项”,这个答案会有所改进。这个答案没有解释一个选项与另一个选项相比的用途,就像有人问的那样:(@brduca不确定您是否亲自进行了向下投票,但如果是,我建议您不要这样做。答案并没有回答OPs问题。问题是:“与ADO.NET实体数据模型(对话框中的第一个选项)相比,EF 6.x DbContext Generator的用途是什么?”以及EF 6.x DbContext Generator的用途是什么?”答案与原来的问题没有任何关系,因此投票被否决。这就像有人说“喝水比喝苏打水有什么好处?”然后有人回答“苏打水是咖啡因的好来源”。谢谢,但这并没有真正的帮助。只有我的两分钱。我认为这两个选项都可以创建派生的DbContext,对于第一个选项“ADO.NET实体数据模型,您可以在向导中选择子选项”Code first from Database“它创建实体和派生的DbContext来访问它们……也许2014年不是这样,但今天这个问题似乎没有答案。