【问题标题】:ADO.NET Entity Framework: Update Wizard will not add tablesADO.NET Entity Framework:更新向导不会添加表
【发布时间】:2010-10-07 08:04:20
【问题描述】:

我将added a new ADO.Net Entity Data Model 加入我的项目并使用Update Wizard 将表格添加到模型中。五个选定的表格被添加到设计图面上。其他两个表不会添加。我在向导中选择它们并单击完成,但它们从未出现在设计图面上。

这是一个错误,还是在某些情况下无法将表格添加到模型中(按设计)?


更新:XML (*.edmx) 揭示了问题。

<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not 
have a primary key defined and no valid primary key could be inferred. 
This table/view has been excluded. To use the entity you will need to 
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
    <Property Name="role_id" Type="decimal" />
    <Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->

【问题讨论】:

  • 这应该有更多的投票。我不知道 Visual Studio 无法添加表,因为 .edmx 文件是错误实际发生的唯一位置。希望他们在 v2 中会有一个对话框!
  • +1 - 就我而言,没有错误消息。
  • 如您所述,不会导入的表没有主键。添加一个PK,你就可以开始了。

标签: .net visual-studio-2008 entity-framework ado.net primary-key


【解决方案1】:

设计面与实体模型不同。在您的 EDMX 中的映射中可能有一个不会出现在设计图面上的表。以 XML 格式查看文件以查看是否是这种情况。在这种情况下,更新向导将不允许您重新添加表,因为它们已经是实体模型的一部分。因此,一般而言,更新向导对实体模型的了解比对设计表面的了解更多,本身

我不认为这正是您所处的情况,但它应该为您提供解决方案的总体思路:进入 XML 并查找对相关表的引用。

【讨论】:

  • 我刚刚遇到了这个问题,我从模型中删除了一个表,当我再次添加它时,视觉设计器没有显示它在数据库中。为了绕过它,我从 .edmx 文件中删除了文本,但设法弄乱了 XML。如果您这样做,请先备份文件,以防万一。幸运的是,我能够用 git diff 找到混乱的标签。
【解决方案2】:

为所有表设置主键,或者为每个表的任何列设置一个未选中的复选框“允许为空”。它对我有用:)

【讨论】:

  • 我相信这是正确的答案,至少对我来说是这样。谢谢!
  • @Parvinder,在我的大部分项目中,我都在为这个问题苦苦挣扎。最终,你的回答让我明白了。在我的情况下,在加入表中,我没有指定 Not null 键字段或只是主键。解决了这个问题后,我心里踏实了。非常感谢
  • 我对决议的理解是,如果 i) 该表没有主键或 (ii) 该表中没有 Allow Null 列,我们无法将表添加到实体模型中。
【解决方案3】:
  1. 更改表结构并添加主列。更新模型。

  2. 在 XML 编辑器中修改 .EDMX 文件并尝试在此特定表的标记下添加一个新列。 (不会工作)

  3. 我不会为退出表创建一个新的主列,而是通过涉及所有现有列来创建一个复合键。(工作)

Entity Framework: Adding DataTable with no Primary Key to Entity Model.

【讨论】:

  • 我遇到了同样的问题。实体模型正在添加表格,但是它没有显示在设计器中。我也无法在代码中访问它。我添加了一个 ID 字段 Key... 成功了!
【解决方案4】:

我也遇到了这个问题,以上所有方法都不适合我。对我有帮助的是以下内容。

当您尝试连接数据库时,该数据库可以有不同的用户使用不同的凭据,它可以接受。假设用户 A 到 D。

如果您尝试与用户连接,请确保该用户启用了正确的凭据,在这种情况下,启用了读取和写入选项。

为此,请启动 MS SQL Server Managment Studio,与您的 SQL Server 连接,然后在 Visual Studio 中选择您尝试与之建立连接的数据库。在 'your_dbname' --> Security --> Users 下,您可以找到用户列表。右键单击您尝试登录的用户名并选择属性。一个窗口打开。选择“常规”(默认选择)页面并在“数据库角色成员资格”选项卡下确保选择“db_datareader”和“db_datawrite”。

注意:当您登录 MS SQL Server Managment Studio 时,请确保您使用可以启用/禁用这些选项的用户登录...

【讨论】:

    【解决方案5】:

    在您的特定表中检查“空值”。如果所有列都设置为“允许 Null”,则实体框架将其视为“Null”表。我遇到了同样的问题,未选中“允许 Null”,它添加了所需的表。

    【讨论】:

    • 它工作,愚蠢的日志中没有错误或警告出现!
    【解决方案6】:

    不会添加没有主键的表。

    【讨论】:

      【解决方案7】:

      我的解决方案是删除整个模型并读取它,包括我想要的新表。

      有一次不小心删除了设计器中的一个表,无法读取。因此删除整个模型并读取它。

      我也遇到了一些问题 (Ado.Net Entity Data Model Not Updating Correctly)

      【讨论】:

        【解决方案8】:

        此问题已在最新版本中得到解决(环境:VS 2012,.net framework 4.5)。只需打开 .edmx 文件并添加所需的表/存储过程/视图。没有主键的表/视图将被创建为只读表/视图。

        表/视图“TABLE_NAME”没有定义主键。已推断出密钥,并将定义创建为只读表/视图。

        【讨论】:

        • 在某些情况下,EF 5.0 中的错误仍然存​​在
        【解决方案9】:

        您不需要删除整个模型(可能是数百个表!)。

        向导可以处理“添加新”项目,但某些更改(例如更改复合键和重命名列) - 它不知道该做什么 - 所以它不会尝试 - 并且事情会不同步。

        所以: 从模型(概念模式)和 Model.Store 中删除有问题的表,然后使用向导更新模型,并仅重新添加有问题的表。

        【讨论】:

          【解决方案10】:

          只是为以前不必这样做的人提供更多细节。 我正在使用安装了更新 4 的 Visual Studio 2013。 我在表格中添加了一些字段,从我的模型中删除了表格,然后去更新,它不允许我检查任何表格。

          我确实有一个主键。

          我创建了一个新的测试表,它出现了,它可以让我检查它,但不是我原来的。

          我以前从未在 XML 中打开过它,也不知道该怎么做。 您右键单击 .edmx 文件并“打开方式”——选择 xml 编辑器。

          有问题的表还好,它甚至还有新字段(奇怪)。

          我删除了所有对它的引用(花了几次)——在你删除一个并保存之后,如果你尝试打开它并且它不会显示,请继续并选择“查看 XML”——查看错误并基本上跟随弹跳球,直到你把它清理干净。

          希望额外的细节对某人有所帮助。

          【讨论】:

            【解决方案11】:

            我发现一种简单的方法是(在 SQL Server Management Studio 中)添加一个 INT 类型的 ID 列,取消选择“允许 Nulls”,然后在 Column properties (of ID) >> Identity Specification >> check (Is Identity) ,并确保设置了增量。

            完成上述操作后,返回您的 .edmx 窗口,右键单击,然后从数据库中更新模型。

            【讨论】:

              【解决方案12】:

              您可以添加主键列交叉表。然后问题解决了

              【讨论】:

                【解决方案13】:

                另一种解决方案是确保您访问数据库的帐户对表具有一定的权限,至少选择。如果帐户没有权限,则不会添加该表。

                在安全性下的 SSMS 中,右键单击用户或角色,然后单击属性。然后点击 Securables。顶部表格显示当前可访问的表格。如果缺少的表不存在,请单击搜索并找到,然后在顶部表中突出显示它们,然后在下部表中分配权限

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2012-04-20
                  • 2019-09-28
                  • 2020-04-28
                  • 2019-01-28
                  • 2013-07-21
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多