它具有DefiningQuery但没有InsertFunction元素…err


123

这件事使我发疯,错误对我来说毫无意义:

无法更新EntitySet'TableB',因为它具有DefiningQuery并且该元素中不存在任何元素来支持当前操作。

我的桌子是这样的:

表A
int idA(身份,主键)
...

表B
int idA(FK表示TableA.idA)
间隔

TableB在SQL Server中没有定义的主键。实体框架已导入表和关联,并将两个字段都设置为键。但是当我尝试向表中插入时,它将输出该错误!

怎么了??


编辑: 根据亚历克斯的建议,解决方案是这样的:

  1. 右键单击edmx文件,选择“打开方式”,XML编辑器
  2. 在edmx:StorageModels元素中找到实体
  3. 完全删除DefiningQuery
  4. 将store:Schema =“ dbo”重命名为Schema =“ dbo”(否则,代码将生成一条错误消息,指出名称无效)
  5. 删除store:Name属性

我保留了原样的键,因为我认为两列都是键的一部分是可以的。


6
感谢您的更新-分步说明帮助该EF newb使ASP.NET MVC教程应用程序正常工作!
亚当·尼尔

谢谢!我有一个问题,就是EF无法为具有HAS主键的sql server 2000表生成正确的edmx文件。但这条指令救了我:)
100r 2010年

4
3.5年后,这篇文章仍然对ppl有所帮助,在本例中为ME!...致:Palantir逐步进行了描述(有效),感谢Alex >>> Bravo!
nanonerd

该解决方案为我工作..谢谢
Delavega

秘诀是从架构定义中删除“ store:”。非常好
Guilherme Ferreira 2014年

Answers:


141

好吧,如果遇到没有PrimaryKey的表,它将被视为View。

视图将显示在StorageModel \ EntitySet [n] \ DefiningQuery元素的EDMX文件中(在XML编辑器中打开以查看)。

当您具有DefiningQuery时,除非添加修改功能,否则实体将变为只读。您需要为插入,更新和删除操作分别设置3个修改功能(也称为存储过程)。

但是您有两种选择:

更改键定义:

  1. 让EF相信它认为的视图实际上是一张桌子
  2. 或添加适当的修改功能

对于您的情况,我建议(1)。


尝试将实体添加到联结表时出现此错误。您的建议已解决,谢谢!
Walter Stabosz 2011年

非常好...,Tnks
Mohan Gundlapalli

不要忘了先从数据库生成的.edmx文件上单击“从数据库更新模型”
Bashar Abu Shamaa 2015年

我面临着同样的问题,奇怪的是,它在我们的本地和测试环境中运行良好,只是在客户的环境(无聊)上不工作
Mox Shah

13

只需在表中添加一个主键即可。而已。问题解决了。

ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)

6

我在表上缺少主键,并收到此错误消息。我注意到的一件事是在将密钥添加到表中之后,我需要使用设计器从edmx中清除表,保存edmx,然后再次对其进行更新以将表重新添加。这并不是拿起密钥。因为它已经被分配为视图。这不需要手动编辑edmx。


5

将主键添加到表,从edmx模型中删除模型,然后从数据库中选择更新,构建并运行......



0
  1. 您需要在记事本或notepad ++或您选择的任何文本编辑器中手动打开.EDMX文件。
  2. 在步骤1中打开的文件中的edmx:StorageModels中找到条目。
  3. 找到DefiningQuery元素并将其完全删除。
  4. 查找store:Schema =“ dbo”到Schema =“ dbo”(如果跳过此步骤,将生成名称无效的错误)。
  5. 保存并关闭文件。

希望它能解决问题。

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.