实体数据模型向导未显示新表

8
我使用 Microsoft SQL Server 2012从脚本创建了一个 SQL 数据库,并使用 Entity Framework 在 C#中生成了一些类。现在,我必须修改并添加了许多新项目到该数据库中,包括存储过程和新表。
然而,在尝试在 Visual Studio Ultimate 2012 中重新生成类时,实体数据模型向导仍显示旧数据库(一周前的样子),包括我删除的一些表。没有任何新的东西被列出。我尝试删除和重新创建数据库,重启两个程序和重启电脑,但都无效。
在 Visual Studio 中生成框架的步骤如下: - 将新项添加到项目中。 - 选择 ADO.NET 实体数据模型。 - 从数据库中选择 Code First。 - 选中“下一步”(连接字符串已经填好)。 - 下一个屏幕是“选择对象和设置”窗口,在这里我仍然看到旧表(而不是新表)。
在更改数据库后,是否需要采取某些特殊步骤才能在实体框架中显示这些更改?
更新: 我找到了一个名为“从数据库更新模型”的选项,但我的 Visual Studio 没有这样的选项。网络搜索表明它可以在“模型浏览器窗口”中找到,但我在 VS 中也没找到这个窗口。进一步搜索表明,打开“edmx”文件后,该窗口将变得可用。我已在整个计算机上搜索了该文件扩展名,并找到了一些结果,但它们都来自其他人的项目。我无法找到与此项目的 c# 解决方案或 sql 数据库相关联的 .edmx。

我对Code First不是很了解,但看起来你正在尝试使用数据库优先策略。选择Code First可能是你的问题所在。在“选择对象和设置”中,毫无疑问你正在查看代码中的模型而不是数据库中的模型。 - pseudocoder
@pseudocoder:你有其他推荐的选项吗? - Nightmare Games
当我添加一个EDM时,我会得到“空模型”或“从数据库生成”的选项。此时没有提到“Code First”。我会选择“从数据库生成”,然后确保我的连接字符串指向正确的服务器/数据库。我使用EF 6。 - pseudocoder
在“选择选项”下,我没有“从数据库生成”的选项,但我有“空模型”的选项。然而,我被指示在项目中使用“从数据库先代码”。 - Nightmare Games
4个回答

5

我曾经在使用Code First时遇到了类似的问题。我按照提问中提到的所有步骤操作,但是表的模型没有被生成。

  • 生成(Build)、清理(Clean)解决方案
  • 在web.config文件中删除连接字符串
  • 删除Models文件夹中的所有文件
  • 右键单击Models文件夹,选择添加(Add),新建项目(New Item)
  • 选择ADO.NET Entity Data Model
  • 为模型添加名称
  • 从数据库中选择Code First
  • 选择新连接
  • 将连接设置保存在web.config文件中 - 勾选

我发现这是因为该表没有主键。因此我修改了该表。

[OrderId] [int] not null identity(1,1) primary key,

它起作用了。

如果有人遇到这种情况,我希望它能帮到你们。


3
在实体数据模型向导中,在“选择数据连接”屏幕上,我选择了“新建连接”,而不是使用现有连接的“下一步”选项。选择服务器名称和数据库名称并重新连接似乎刷新了视图,现在新表已经显示出来。
我感觉可能是我漏掉了一些小事情。
更新:
重新连接使新表可以使用,但存储过程不行。以下是我如何解决它的方法。
在模型向导中,选择“来自数据库的Code First”不会包括存储过程,原因不明。对我来说,正确的选项是“从数据库生成EF Designer”。我不仅得到了新表和存储过程,而且还生成了第一个选项无法创建的edmx文件。

除了 Visual Studio 不知道为什么不让我更改数据连接,它跳过了“选择数据连接”并禁用了“上一步”按钮。烦死了! - Gerry

2

我遇到了这个问题,后来发现使用的SQL用户没有对新创建的表进行选择访问权限。

我在数据库上运行了GRANT SELECT ON [tablename] to [sqluser],为所有新表授权SELECT权限。你也可以将SQL用户添加到服务器角色(如sysadmin)中。

然后从数据库中运行“Update Model”,就可以显示新表了。


1
我删除了一张表,但不知道如何重新添加它。我的EDMX文件不一致。当编辑EDMX文件时,我必须从“模型浏览器”窗口中删除所有对该表的引用,然后该表会重新出现在EDMX编辑器中,我就能够重新添加它。
如Mukesh Kumar(感谢)所提议的,在文本编辑器中也可以完成此操作(但您必须知道自己在做什么),但我认为这种解决方案是最后的可能性,以免在EDMX文件中创建更多的不一致性。

1
我在文本编辑器中打开了EDMX文件,并查找了其中对象名称的出现。然后,我找到了一个出现并从文件中删除了该XML行,然后保存了它。在删除后,ADD向导开始显示该对象。谢谢,Honza。 - Mukesh Kumar

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