使用EF 4.x在ASP.Net MVC4应用程序中生成.edmx后,.Designer.cs文件为空。

8

我已经开始了一个非常简单的ASP.Net MVC4应用程序,采用数据库优先方法(使用现有的DB)。我使用ADO.Net实体数据模型模板生成了.edmx。该过程创建了一个xxxxxxx.Designer.cs文件,位于xxxxxxx.edmx选项下。然而,.cs文件是空的,显示以下信息。

// Default code generation is disabled for model 'C:\Visual Studio 2010\Projects\xxx\DProject\Models\BIReportDataModel.edmx'. 
// To enable default code generation, change the value of the 'Code Generation Strategy' designer
// property to an alternate value. This property is available in the Properties Window when the model is
// open in the designer.

根据信息,我已经更改了在xxxxxxx.Designer.cs文件中生成代码的属性。

问题:

  1. 这样做是正确的吗?这个文件的目的是什么?
  2. 我还需要通过右键单击“添加代码生成项”,然后选择EF DBContext生成器从.edmx设计器页面生成强类型DBContext类吗?

数据库优先方法的具体过程是什么?

我看到很多帖子/博客/教程,所有内容都非常混乱,大多数都是针对CodeFirst方法的。


我有一个能满足你的答案吗? - Tom Stickel
你在使用 Visual Studio 2010 吗?你的项目中是否有名为 *.context.tt 和 *.tt 的文件? - RBT
你的数据库中有主键吗?如果没有,这可能会成为一个问题。 - Göksenin Cakir
2个回答

8

Code First技术既可以是数据库优先(即有现成的数据库),也可以不依赖于已有的数据库(具有灵活性)。你只需要创建POCO对象,即普通的C#对象。这些类将按照你的要求,不论数据库是否存在,映射出你的数据库表结构。如果你不知道该做什么,则可能不想使用此技术。

EDMX以前是设计人员会进行填充的,在VS 2012及更高版本中,默认使用tt文件。建议你从NuGet获取tt编辑器以充分利用它们。

或者,我建议你执行以下操作:

 1. Open the EDMX file - double click
 2. Right Click in the EDMX diagram and click on Properties 
 3. In the properties window change the "Code Generation Strategy" from  None to Default
 4. Delte the tt files as you don't want both entities / contexts in project.

EDMX在EF Core 1.0中被淘汰了,现在改名为asp.net Core 1,EF7也改为EF Core 1。请参考链接:http://www.hanselman.com/blog/ASPNET5IsDeadIntroducingASPNETCore10AndNETCore10.aspx - Tom Stickel
到目前为止(VS 2015),它被称为“代码生成策略:Legacy ObjectContext”。 - Andreas Reiff
1
好知道。谢谢。有时我必须使用EDMX打开项目,这真的很糟糕(重新生成文件),一些开发人员的机器上存在各种空间问题,需要安装运行时。可能是实现的edmx版本,因为很多年前我没有看到这么多问题。但我不信任它。我会使用Code First,但老实说,最近我开始使用Dapper。 - Tom Stickel
遇到了太多Dapper的问题 - IQueryable等等...所以回到使用带有pocos的EF... - Tom Stickel

2
在 Visual Studio 2017 中,创建设计者 .cs 文件中的代码(使用实体框架 5.0)我会这样做:
  • 打开模型 .edmx 并更改 "代码生成策略"
  • 删除模型中的 .tt 文件

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接