ChatGPT解决这个技术问题 Extra ChatGPT

它有一个 DefiningQuery 但没有 InsertFunction 元素... err

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

无法更新 EntitySet 'TableB',因为它有一个 DefiningQuery 并且元素中不存在支持当前操作的元素。

我的表是这样放置的:

TableA
int idA (identity, primary key)
...

TableB
int idA (FK for TableA.idA)
int val

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

怎么了??

编辑:正如亚历克斯所建议的,解决方案是这样的:

右击 edmx 文件,选择打开方式,XML 编辑器在 edmx:StorageModels 元素中定位实体 完全移除 DefiningQuery 将 store:Schema="dbo" 重命名为 Schema="dbo" (否则代码会产生错误说名称无效)删除 store:Name 属性

我把钥匙原样留下,因为我认为这两列都是钥匙的一部分。

感谢您的更新 - 分步说明帮助这个 EF 新手让 ASP.NET MVC 教程应用程序正常工作!
谢谢!我遇到了一个问题,即 EF 没有为具有主键的 sql server 2000 表生成正确的 edmx 文件。但是这个指令救了我:)
3.5 年后,这篇文章仍在帮助人们,在这种情况下,我! ...致:Palantir 一步一步的描述(它起作用了),感谢 Alex >>> Bravo !
该解决方案对我有用..谢谢
秘密是从模式定义中删除“store:”。非常好

J
Jonathan

好吧,当遇到没有 PrimaryKey 的表时,它会被视为视图。

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

当您有一个 DefiningQuery 时,实体变为只读,除非您添加修改函数。您需要 3 个修改函数(又名存储过程),分别用于插入、更新和删除。

但是你有两个选择:

更改键定义:

并让EF相信它认为是视图的其实是一个表或者添加适当的修改函数

在你的情况下,我推荐(1)。


当我尝试将实体添加到联结表时出现此错误。你的建议解决了,谢谢!
不要忘记首先在从数据库生成的 .edmx 文件上单击“从数据库更新模型”
我面临同样的问题,奇怪的是,它在我们的本地和测试环境中运行良好,只是在客户端的环境中无法运行(沉闷)
J
Jebastin J

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

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

m
mlapaglia

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


佚名

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


P
Paulo 'PaulusHC' Cruz

@Palantir。验证你的两个表都设置了主键,并小心在一个表中设置了多个主键。


B
Brijesh Kumar Tripathi

您需要在记事本或记事本++ 或您选择的任何文本编辑器中手动打开 .EDMX 文件。在步骤 1 中打开的文件中找到 edmx:StorageModels 中的条目。找到 DefiningQuery 元素并完全删除此标记。找到 store:Schema="dbo" 到 Schema="dbo" (如果跳过这一步会产生名称无效的错误)。保存并关闭文件。

希望它能解决问题。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅