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 Bubriski

+1-就我而言,没有错误消息。
teynon 2013年

如您所述,不会导入的表没有主键。添加PK,您就可以开始了。
埃里克

Answers:


46

设计图面与实体模型不同。EDMX的映射中可能有一个表,该表未出现在设计图面上。以XML格式查看文件,看看是否是这种情况。在这种情况下,更新向导将不允许您重新添加表,因为它们已经是实体模型的一部分。所以,一般来说,更新向导知道更多关于你的实体模型比它关于设计的表面,本身

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


4
我刚刚遇到了这个问题,我从模型中删除了一个表,然后再次添加它时,可视设计器并未将其显示为存在于数据库中。为了解决这个问题,我从.edmx文件中删除了文本,但是设法弄乱了XML。如果这样做,请先备份文件,以防万一。幸运的是,我能够使用git diff找到混乱的标签。
GrandMasterFlush 2012年

41

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


2
我相信这是正确的答案,至少对我来说是这样。谢谢!
埃里克

@Parvinder,我在大多数项目中都在为这个问题而苦苦挣扎。最终,您的回答让我很清楚。在我的情况下,在联接表中,我没有指定“非空键”字段或仅指定主键。解决此问题后,我有了内心的平静。非常感谢
PatsonLeaner '18

我对决议的了解是,如果i)该表没有主键,或者(ii)该表中没有允许空列,则无法将表添加到实体模型中。
Murtuza Khan,

10

1.更改表结构并添加主列。更新模型。

2.在XML编辑器中修改.EDMX文件,然后尝试为此特定表在标签下添加新列。(不管用)

3.我将创建一个包含所有现有列的复合键,而不是创建一个新的“要退出的主列”表。

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


我遇到了同样的问题。实体模型正在添加表,但是,设计器中未显示该表。我也无法通过代码访问它。我添加了一个ID字段密钥...有效!
拉维·拉姆

6

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

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

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

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

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


5

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


1
它的工作原理,愚蠢的没有错误也没有警告出现在日志中!
RolandoCC '18


1

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

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

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


1

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

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


1
在某些情况下,错误仍然存​​在于EF 5.0中
Greg Z.

0

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

向导可以处理“添加新项”,但是有些更改,例如更改组合键和重命名列-它不知道要做什么-因此它不尝试-事情变得不同步。

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


0

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

我有一个主键。

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

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

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

我删除了对它的所有引用(进行了几次)-删除并保存后,如果尝试打开它,它不会显示,请继续并选择“ view XML”-查看错误并基本上跟随弹跳球,直到将其清理干净。

希望额外的细节可以帮助别人。


0

我发现的一种简单方法是(在SQL Server Management Studio中)添加一个INT类型的ID列,取消选择“允许空值”,然后在(ID的)列属性下>>身份规范>>检查(为Identity),并进行确保已设置增量。

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.