2012-11-19 195 views
41

如果我对EF 5.0模型做了任何更改,VS似乎没有看到更改。我曾尝试添加一个新的表格,该表格在模型中显示得很好,但如果我尝试在某处使用该表格,则该表格不会显示在intellisense中,我无法使用它。更新实体框架模型后,Visual Studio看不到更改

我也尝试更改列的数据类型,如果我查看.edmx模型文件,它又显示正常,但visual studio仍然会给我编译器错误,因为我试图分配不正确的数据类型。

如果我完全删除了EDMX,然后重新创建它,那么这些更改就可以正常工作。但每次我应该能够“从数据库更新模型”并重建时,从数据库重新生成是很麻烦的。

我以前从来没有遇到EF的这些问题。有谁知道这个问题的原因或解决方法?

谢谢。

+1

什么是你的EDMX代码生成策略? (打开edmx,点击F4) – Heather

+1

@ Heather它被设置为'None'。我试着将它改为'Default',认为肯定是问题所在,现在我有几十个错误说,Type [table]已经包含了每个表/列的[column]的定义。有什么想法吗? – Kyle

+1

是的,你已经解决了你的问题的前半部分。 “无”根本不会生成代码。现在您正在生成代码,您需要解决数据库与edmx之间的逻辑不一致问题。通常有两种方法可以做到这一点:第一种方法是从edmx中删除每个实体,然后从数据库运行更新。 – Heather

回答

15

如果这是位于一个文件夹中的文件EDMX臭虫现在是固定的 - 下载和安装VS 2012更新1.你可以得到它:http://www.microsoft.com/visualstudio/eng/downloads#d-visual-studio-2012-update

+0

也有同样的问题,安装了更新,它在edmx表中刷新后工作。 EF版本4.4,他们解决这个问题的时间到了! –

+0

只是站起来。 EF打开多个解决方案时不起作用。必须全部关闭,以便VS抓住变化。 (即使有完全独立的项目。) –

+2

我有VS 2013更新1,但同样的错误发生。 –

0

您是否在N层项目中工作?如果是这样,请在使用之前重新尝试重建数据层(或存储EDMX文件的任何地方)。

+0

edmx与我使用的是同一个项目。尽管我试图评论编译器错误重建它,但没有成功。 – Kyle

+0

我会研究Heather在你的问题上提出的建议。代码生成策略应该设置为默认情况。 – Middas

+0

我也会检查你的表格和栏目,确保它们可以公开访问。 – Middas

7

您应该有一个<XXX>Model.tt文件,它是生成模型类的T4模板。

如果它位于不同的项目中,它在保存edmx文件时不会更新。

无论如何,尝试在Solution Explorer中右键单击并选择Run Custom Tool

+0

另一种方式:如果您选择“运行自定义工具”而没有保存edmx文件,实体将不会被更新。 – bvgheluwe

13

这显然是在实体框架中的错误,当你的EDMX文件所在的文件夹里面的模型没有得到更新。 目前可用的解决方法是:

  1. 安装VS 2012 Update 1,它应该修复该错误。
  2. 如果您无法安装Update 1,则必须右键单击model.tt T4模板文件并单击运行自定义工具。这将为您更新课程。

希望能帮助那里的人。

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

+0

现在已经修复 - 请参阅我的其他回复。 – Pawel

+0

哈哈不错的一个帕维尔,看起来像我们在一个小时内发布了相同的解决方案。 – Ghlouw

+0

谢谢,我现在运行自定义工具后为我工作。 – arunlalam

52

先建您的项目,如果成功,请在上下文中指向“model.tt”。然后运行自定义工具。它会解决它。

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

+0

工程就像一个魅力。 – shazia

+1

非常感谢!这个错误似乎已经在VS2013更新3中回来了,但遵循这个提示是一个快速简单的解决方法。 – Patrick

+0

非常感谢。我必须首先显示排除的项目,然后重新包含.tt's以运行该工具。 –

6

我也有这个问题,但是,右键单击model.tt文件并运行“自定义工具”对我来说没有任何影响,但对页面Ghlouw提到的使用菜单项“BUILD>转换所有T4模板。“这为我做

2

我寻找这个答案,因为我在VS2013类似的情况。以我为例,我发现一个简单的” Clean Solution“清除了所有的旧的定义。

0

我已经也没有遇到这个问题,在model.tt文件下没有生成任何类。在我的情况下,这是由于我在SQL2012中构建数据库时遇到的问题。我在表中设置了一个列,以便可以为null一个外键,虽然我认为你应该可以做到这一点,但它在EF5中引起了一个问题:

一旦这个被清除并且图表从数据库更新后,它们就会重新出现

EF5 VS2013

1

右键单击.tt文件并选择“运行自定义工具”,应该对其进行更新: see image