在更新实体框架模型后,Visual Studio未能看到更改。

54
如果我对我的EF 5.0模型进行任何更改,VS似乎看不到这些更改。我已经尝试添加一个新的表格,在模型中显示得很好,但是如果我尝试在某个地方使用它,该表格将不会出现在Intellisense中,我无法使用它。
我还尝试更改列的数据类型,如果我查看了.edmx模型文件,它也可以很好地显示出来,但是Visual Studio仍然会在该字段上给我编译器错误,因为我试图分配不正确的数据类型。
如果我完全删除EDMX,然后重新创建它,那么更改就可以正常工作。但是每次都应该能够从数据库中“更新模型”并重新构建,这样做很繁琐。
我以前从未遇到过这些EF问题。有人知道这个问题的原因或解决方法吗?
谢谢。

1
你的edmx代码生成策略是什么?(打开edmx,按F4键) - Heather
1
@Heather 它被设置为“None”。我尝试将其更改为“Default”,认为那一定是问题所在,但现在我有数十个错误,每个表/列都会显示“类型[table]已经包含了[列]的定义”。你有什么想法吗? - Kyle
1
是的,你已经解决了问题的前半部分。“None”根本不会生成代码。既然你正在生成代码,你需要解决数据库和edmx之间的逻辑不一致。通常有两种方法可以做到这一点:第一种方法是从edmx中删除每个实体,然后从数据库运行更新。 - Heather
好的,这是EF5特定的东西,在EF4中我没有看到。我会花些时间追踪哪些部分类试图基于不同的类,并理解原因。如果没有更多关于您的项目的背景(它是新的还是有一组已建立的实体类?),很难给出指导。 - Heather
仍然面临这个问题,使用VS 2019。 - Aryan Firouzian
显示剩余8条评论
11个回答

74

首先构建您的项目,如果成功,请右键单击"model.tt"文件并选择运行自定义工具。这将修复它。

再次构建您的项目,并将指向"model.context.tt"运行自定义工具。它会更新DbSet列表。


1
非常感谢您!这个错误似乎在VS2013更新3中又出现了,但是遵循这个提示是一个快速简单的解决方法。 - Patrick Montelo
非常感谢。我必须首先显示排除的项目,然后重新包含.tt文件才能运行该工具。 - Kurtis Cochrane
在VS2019中也帮我解决一下问题。看起来似乎与我之前按下“可能会造成损害”的警告框有关。 - Simon Dugré

16

显然,这是实体框架中的一个错误,即当您的 Edmx 文件位于文件夹内时,模型没有得到更新。目前可用的解决方法如下:

  1. 安装 VS 2012 Update 1,它应该会修复这个错误。
  2. 如果您无法安装 Update 1,则需要右键单击模型.tt T4 模板文件并点击运行自定义工具。这将为您更新类。

希望能帮助到有需要的人。

链接:http://thedatafarm.com/blog/data-access/watch-out-for-vs2012-edmx-code-generation-special-case/


已经修正了 - 请参见我的其他回复。 - Pawel
哈哈,不错的解决方案,Pawel。看起来我们在一个小时内发布了相同的解决方案。 - Ghlouw
这似乎是 VS 2013 Update 3 中的一个 bug,运行自定义工具已经为我修复了它。 - Patrick Montelo

16

遇到了同样的问题,安装了更新后,在edmx中刷新表格后它就可以工作了。EF的版本是4.4,他们终于修复了这个问题! - Amc_rtty
提醒一下,当打开多个带有 EF 的解决方案时,它将无法工作。必须关闭所有解决方案,以便 VS 捕捉到更改。(即使这些项目是完全独立的。) - Don Thomas Boyle
2
我有VS 2013更新1,但是同样的错误仍然发生。 - Mahmood Jenami

13

我也遇到了这个问题,但右键单击model.tt文件并运行“自定义工具”在某种程度上对我没有任何作用,但Ghlouw链接页面上的评论提到使用菜单项“BUILD > Transform All T4 Templates.” 这个方法对我起了作用


8
右键单击.tt文件,选择“运行自定义工具”,这样就可以更新它了:see image

7
你应该在某个地方拥有一个<XXX>Model.tt文件,它是生成你的模型类的T4模板。
如果它在另一个项目中,当你保存edmx文件时它不会更新。
无论如何,试着在解决方案资源管理器中右键单击它,然后选择Run Custom Tool

同样地,如果您选择在未保存edmx文件的情况下运行自定义工具,则实体将不会被更新。 - bvgheluwe

3

我搜索这个答案是因为我在VS2013中遇到了类似的情况。在我的情况下,我发现一个简单的 "Clean Solution" 清除了所有旧的定义。


1
你在一个N层项目中工作吗?如果是这样,请在使用之前重建你的数据层(或EDMX文件存储位置)。

edmx文件与我使用它的项目位于同一位置。我尝试过注释掉编译器错误,还是无法成功重建。 - Kyle
我会看一下Heather在你的问题上提出的建议。在你的情况下,代码生成策略应该设置为默认。 - Middas
我还会检查您的表格和列,确保它们是公开可访问的。 - Middas

0

我也遇到了这个问题,即在model.tt文件下没有生成任何类。在我的情况下,这是由于我在SQL2012中构建数据库时存在问题。我将表中的一列设置为可空,该列还是外键,尽管我认为你应该能够这样做,但在EF5中会导致问题。

一旦清除了这个问题,并从数据库更新了图表,它们就重新出现了。

EF5 VS2013


0

更换笔记本电脑后,当我更新实体框架模型时,代码中看不到存储过程

我所做的使其正常工作的方法

  • 更新Visual Studio 2012 Update 5(无效)
  • 从程序中更新/修改(无效)
  • 更新存储过程后,重新构建项目,然后转到context.cs,右键单击并运行自定义工具(无效)
  • 进行RND(有人说问题是由于MSSQL中的某些权限),但不幸的是,我已经在MSSQL中做了很多权限,但是(无效)
  • 安装2019并运行项目。现在一切正常

结论

  • Visual Studio 2012存在一个错误(该错误已在Update 1、2、3和4中得到解决)
  • 更改Visual Studio版本将解决此问题

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