ADO.NET实体框架:更新向导不会添加表

93

我在项目中添加了一个新的ADO.Net实体数据模型,并使用更新向导将表格添加到该模型中。其中五个选定的表格被添加到了设计图面上,但另外两个表格无法添加。我在向导中选择它们,然后点击"完成",但它们从未显示在设计图面上。

这是一个错误吗?还是有一些情况下某些表格不能被添加到模型中(出于设计考虑)?


更新: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>-->

8
这个帖子应该得到更多的投赞成票。我不知道Visual Studio无法添加表格,因为只有在.edmx文件中才会出现错误提示。希望在v2中会有一个对话框! - John B
+1 - 在我的情况下,没有错误信息。 - teynon
1
正如你所指出的,无法导入的表格没有主键。添加一个主键就可以了。 - Eric
13个回答

46

设计界面与实体模型不同。在EDMX中的映射中可能会有一个未出现在设计界面上的表格。查看文件的XML格式以确定情况。 在这种情况下,由于它们已经是实体模型的一部分,因此更新向导将不允许您重新添加表格。因此,通常来说,更新向导了解您的实体模型更多,而不是设计界面本身。

我认为您的情况不完全相同,但这应该可以给您提供解决方案的一般思路:进入XML并查找相关表格的引用。


4
我刚遇到了这个问题,我从模型中删除了一个表,但是当我想再次添加它时,可视化设计器没有显示它存在于数据库中。为了解决这个问题,我删除了.edmx文件中的文本,但是弄乱了XML。如果你也想这样做,请先备份文件以防万一。幸运的是,我能够用git diff找到错误的标签。 - GrandMasterFlush

45

将所有表设置为主键,或只需取消每个表中任何列的复选框“允许空值”。对我有效 :)


2
我相信这是正确的答案,至少对我来说是这样。谢谢! - Eric
@Parvinder,我在大多数项目中都遇到了这个问题。最终,你的答案让我一切都清晰了。在我的情况下,在连接表中,我没有指定非空键字段或仅主键。修复后,我感到很放心。非常感谢! - PatsonLeaner
我的理解是,如果表格没有主键或者该表格中不存在允许空值的列,则无法将其添加到实体模型中。 - Murtuza Ali Khan Mohammed

14

我遇到了同样的问题。实体模型已经添加了这个表,但是它没有显示在设计器中。我也无法在代码中访问它。我添加了一个ID字段键...然后就可以了! - Ravi Ram

6
我也遇到过这个问题,上面的方法都没能解决。对我有帮助的是以下步骤。
当你尝试连接一个数据库时,该数据库可能有不同的用户和凭证可以接受,比如用户A至D。
如果你尝试使用某个用户连接,请确保该用户已启用正确的凭证,例如本例中的读取和写入选项。
要完成此操作,请启动MS SQL Server Management Studio,连接到你的SQL服务器并在Visual Studio中选择要连接的数据库。在“your_dbname”下的“Security”下找到“Users”列表。右键单击你要登录的用户名并选择属性。窗口会打开。选择默认选中的“General”页面,在“Database role membership”选项卡下确保选择了“db_datareader”和“db_datawrite”
注意:当你登录到MS SQL Server Management Studio时,请确保使用可以启用/禁用这些选项的用户登录...

6

检查你特定表格中的“Null”值。如果所有列都设置为“Allow Null”,Entity Framework会将其视为“Null”表格。我遇到了同样的问题,取消了“Allow Null”的选中状态,并添加了所需的表格。


1
它运行正常,愚蠢的日志中没有出现错误或警告! - RolandoCC

4

没有主键的表将不会被添加。


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

表/视图“TABLE_NAME”没有定义主键。已经推断出关键字,并且定义已被创建为只读表/视图。


1
在某些情况下,错误仍然存在,即使在 EF 5.0 中。 - Greg Z.

1

我的解决方案是删除整个模型,然后重新添加包括我想要的新表。

我曾经在设计师中意外删除了一个表,但无法重新添加它。因此,我删除整个模型并重新添加它。

我也遇到了一些问题(Ado.Net实体数据模型未正确更新


0

我发现一种简单的方法(在SQL Server管理工具中)是添加一个INT类型的ID列,取消“允许空值”,在列属性下(ID的属性)>>标识规范>>勾选(Is Identity),并确保递增被设置。

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


0

对于那些没有做过这个的人,我想提供更多的细节。 我正在使用安装了更新4的Visual Studio 2013。 我向一个表中添加了一些字段,然后从我的模型中删除了该表,接着进行更新,但是它不允许我勾选任何表。

我有一个主键。

我创建了一个新的测试表,它出现了,并且可以勾选,但是我的原始表却不行。

我以前从未在XML中打开过它,也不知道如何操作。 您可以右键单击.edmx文件并选择“打开方式”--选择xml编辑器。

问题中的表确实存在,甚至还有新字段(奇怪)。

我删除了所有与它相关的引用(需要几次尝试)--在您删除一个并保存之后,如果尝试打开它而无法显示,请直接选择“查看XML”-查看错误,并基本上按照提示进行操作,直到清理完毕。

希望这些额外的细节能够帮助某些人。


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