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

时间:2009-02-12 23:18:20

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

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

感谢您Craig的回复。

13 个答案:

答案 0 :(得分:43)

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

我认为这不是你所处的情况,但它应该为你提供解决方案的一般想法:进入XML并寻找对相关表的引用。

答案 1 :(得分:37)

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

答案 2 :(得分:10)

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

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

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

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

答案 3 :(得分:5)

我也有这个问题,以上所有对我都没有用。对我有帮助的是以下几点。

当您尝试连接数据库时,数据库可以使用具有不同凭据的不同用户,它可以接受。让我们说用户A直到D。

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

要执行此操作,请启动MS SQL Server Managment Studio,与SQL Server连接并选择您尝试在Visual Studio中建立连接的数据库。在&#39; your_dbname&#39; - &GT;安全 - &gt;用户找到用户列表。右键单击您尝试登录的用户名,然后选择属性。一个窗口打开。选择&#39; General&#39; (默认选中)页面和选项卡&#39;数据库角色成员资格&#39; 确保&#39; db_datareader&#39;和&#39; db_datawrite&#39;被选中。

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

答案 4 :(得分:5)

检查&#39; Nulls&#39;在你的特定表中。如果所有列都设置为“允许空”&#39;实体框架将其视为“无效”。表。我遇到了同样的问题并且未经检查&#39;允许空闲&#39;并添加了所需的表格。

答案 5 :(得分:1)

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

我偶然删除了设计器中的一个表,但无法读取它。因此删除整个模型并读取它。

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

答案 6 :(得分:1)

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

  

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

答案 7 :(得分:1)

不添加没有主键的表。

答案 8 :(得分:0)

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

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

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

答案 9 :(得分:0)

为任何以前没有这么做的人扔掉更多细节。 我正在使用安装了更新4的visual studio 2013。 我在表格中添加了一些字段,从模型中删除了表格然后进行了更新,它不会让我检查任何表格。

我有一把主键。

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

我以前从未在XML中打开它,也不知道如何做到这一点。 右键单击.edmx文件并“打开方式” - 选择xml编辑器。

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

我删除了所有对它的引用(花了几次) - 删除一个并保存后,如果你试图打开它并且它不会显示只是继续并选择“查看XML” - 看看错误,基本上跟着弹跳球,直到你清理完毕。

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

答案 10 :(得分:0)

我发现的一种简单方法是(在SQL Server Management Studio中)添加类型为INT的ID列,取消选择“允许空值”,并在列属性(ID)&gt;&gt;下添加。身份规范&gt;&gt; check(Is Identity),并确保设置增量。

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

答案 11 :(得分:0)

您可以添加“主键”列交叉表。那么问题就解决了

答案 12 :(得分:0)

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

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