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>-->
4

13 回答 13

46

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

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

于 2009-02-13T14:16:33.200 回答
44

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

于 2010-07-21T11:37:07.537 回答
14
  1. 更改表结构并添加主列。更新模型。

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

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

实体框架:将没有主键的 DataTable 添加到实体模型。

于 2012-04-29T18:09:08.770 回答
6

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

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

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

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

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

于 2015-01-13T12:54:04.507 回答
6

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

于 2017-03-01T20:58:26.860 回答
4

不会添加没有主键的表。

于 2019-04-05T11:48:34.880 回答
1

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

有一次不小心把设计器里的一个表删了,读不下去了。因此删除整个模型并读取它。

我对此也有一些问题(Ado.Net 实体数据模型未正确更新

于 2009-04-21T21:37:37.140 回答
1

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

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

于 2013-04-18T03:22:48.237 回答
0

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

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

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

于 2013-07-26T17:20:02.090 回答
0

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

我确实有一个主键。

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

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

有问题的表在那里很好,它甚至有新的字段(奇怪)。

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

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

于 2014-12-17T14:10:54.003 回答
0

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

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

于 2015-08-05T16:33:08.527 回答
0

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

于 2020-05-26T15:34:45.640 回答
0

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

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

于 2020-08-31T18:37:29.120 回答