【问题标题】:Entity Data Model Wizard Not Showing New Tables实体数据模型向导不显示新表
【发布时间】:2014-12-02 19:37:35
【问题描述】:

我使用 Microsoft SQL Server 2012 从脚本创建了一个 sql 数据库,并使用实体框架在 C# 中生成了一些类。现在我不得不修改并向该数据库添加许多新项目,包括存储过程和新表。

但是,在尝试在 Visual Studio Ultimate 2012 中重新生成类时,实体数据模型向导仍然显示旧数据库(一周前的样子),包括我删除的一些表。没有列出任何新内容。我试过删除并重新创建数据库,重新启动两个程序,然后重新启动电脑没有效果。

我在 Visual Studio 中生成框架的步骤是:

  • 向项目添加新项目。
  • 选择 ADO.NET 实体数据模型。
  • 从数据库中选择 Code First。
  • 选择下一步(连接字符串已填好)。
  • 下一个屏幕是“选择对象和设置”窗口,在该窗口中我仍然可以看到旧表(而不是新表)。

在更改数据库后我需要采取一些特殊步骤以使这些更改显示在实体框架中吗?

更新:

我有一个“从数据库更新模型”选项的线索,但我的 Visual Studio 没有这样的选项。网络搜索表明它在“模型浏览器窗口”中找到,我在 VS 中也没有找到。进一步搜索表明该窗口在打开“edmx”文件后变为可用。我已经在整个 pc 中搜索了该文件扩展名并找到了一些结果,但它们都来自其他人的项目。我找不到与此项目的 c# 解决方案或 sql 数据库关联的 .edmx。

【问题讨论】:

  • 我对 Code First 了解不多,但您似乎正在尝试执行数据库优先策略。选择 Code First 可能是您的问题。在“选择对象和设置”中,毫无疑问,您正在查看代码中的模型而不是数据库。
  • @pseudocoder:您还有其他推荐的选择吗?
  • 当我添加 EDM 时,我会看到“空模型”或“从数据库生成”选项。那时没有提到“代码优先”。我会选择“从数据库生成”,然后确保我的连接字符串指向正确的服务器/数据库。我使用 EF 6。
  • 在“选择选项”下,我没有“从数据库生成”选项,但我有“空模型”。然而,“数据库中的代码优先”是我被指示用于该项目的那个。

标签: c# sql-server entity-framework visual-studio-2012


【解决方案1】:

我在使用 Code First 时遇到了类似的问题。我遵循了问题中提到的所有步骤,但没有生成表的模型。

  • 构建、清理解决方案
  • 从 web.config 中删除 conn 字符串
  • 删除 Models 文件夹中的所有文件
  • 右键单击模型文件夹,添加,新建项目
  • 选择 ADO.NET 实体数据模型
  • 为模型添加名称
  • 从数据库中选择代码优先
  • 选择新连接
  • 在 web.config 中保存连接设置 - 选中

我发现这是因为表没有主键。 所以我改变了表格

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

它成功了。

如果有人遇到这种情况,我希望它有所帮助。

【讨论】:

    【解决方案2】:

    在实体数据模型向导中,在“选择您的数据连接”屏幕上,我选择了“新建连接”,而不是使用现有连接点击“下一步”。选择服务器名称和数据库名称并重新连接似乎刷新了视图,现在新表已显示。

    我有一种感觉,我错过了一些十秒钟的小事。

    更新:

    重做连接使新表可用,但存储过程不可用。这是我修复它的方法。

    在模型向导中,无论出于何种原因,选择“数据库中的代码优先”都不会包含存储过程。对我来说,正确的选项是“数据库中的 EF 设计器”。我不仅获得了新表和存储过程,而且还生成了第一个选项不会创建的 edmx 文件。

    【讨论】:

    • 除了 Visual Studio 不允许我出于某种原因更改数据连接,它会跳过选择您的数据连接并禁用上一个按钮。啊!
    【解决方案3】:

    我遇到了这个问题,结果是正在使用的 SQL 用户没有选择访问新创建的表的权限。

    我在数据库上为所有新表运行了 GRANT SELECT ON [tablename] to [sqluser]。您也可以将 sql 用户添加到像 sysadmin 这样的服务器角色。

    从数据库运行更新模型然后显示新表。

    【讨论】:

      【解决方案4】:

      我删除了一个表,但没有看到它来重新添加它。我的 EDMX 文件不一致。编辑 EDMX 文件时,我必须从模型浏览器窗口中删除对该表的所有引用,然后该表重新出现在 EDMX 编辑器中并且我能够重新添加它。

      正如 Mukesh Kumar 所提议的(谢谢),您可以在文本编辑器中执行此操作(但您必须知道自己在做什么),但我会选择此解决方案作为最后一种可能性,以免在EDMX 文件。

      【讨论】:

      • 我在文本编辑器中打开了 EDMX 文件,并在其中查找对象名称的出现。然后,我发现了一个事件并从文件中删除了该 XML 行并保存了它。删除后,添加向导开始显示该对象。谢谢,Honza。
      猜你喜欢
      • 2019-03-16
      • 2012-06-14
      • 2016-09-13
      • 1970-01-01
      • 2023-03-29
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      相关资源
      最近更新 更多