C# 因为它有一个定义查询,没有<;插入函数>;元素存在于<;修改函数映射>;要素

C# 因为它有一个定义查询,没有<;插入函数>;元素存在于<;修改函数映射>;要素,c#,.net,entity-framework,C#,.net,Entity Framework,我在应用程序中使用EF 我尝试将新记录保存\插入到映射表中 并获取以下错误: 无法更新EntitySet“UserSlimitationCountry”,因为它有一个DefiningQuery,并且元素中不存在支持当前操作的元素。 我应该自己在edmx中定义它吗?怎么做?我的多对多映射表缺少PK 添加,问题就解决了。同意接受的答案。 只是提供背后的原因 当使用没有主键的表进行EF映射时,它将被视为一个视图。由于视图是逻辑实体,因此无法更新它们 这样,要么将丢失的主键添加到表中,要么将它们视为视图

我在应用程序中使用EF

我尝试将新记录保存\插入到映射表中

并获取以下错误:

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


我应该自己在edmx中定义它吗?怎么做?

我的多对多映射表缺少PK


添加,问题就解决了。

同意接受的答案。 只是提供背后的原因

当使用没有主键的表进行EF映射时,它将被视为一个视图。由于视图是逻辑实体,因此无法更新它们

这样,要么将丢失的主键添加到表中,要么将它们视为视图,不要对它们执行任何更新操作。

如果视图是可更新的,只需删除 元素的内部视图的EntitySet定义中的元素 .edmx的StorageModel部分,以及正常的更新处理 将与任何其他表一样工作

我就是这样。简单地删除会导致另一个错误。除了最后一个,我遵循了这篇文章的步骤。为方便起见,我从帖子中复制了解决问题的4个步骤,如下所示:

  • 在edmx文件上单击鼠标右键,选择“使用XML编辑器打开”
  • 在edmx:StorageModels元素中找到实体
  • 完全删除
    定义查询
  • 将store:Schema=“dbo”重命名为Schema=“dbo”(否则,代码将生成一个错误,表明名称无效)
  • 在edmx文件上单击鼠标右键,选择“使用XML编辑器打开”

  • 在edmx:StorageModels元素中找到实体

  • 完全删除定义查询

  • 存储区:Schema=“dbo”
    重命名为
    Schema=“dbo”
    (否则,代码将生成一个错误,表明名称无效) 这些步骤对我有效


  • 确保外键表中没有多个列名与引用表中的列相匹配;只有主键应该在参考表和参考表之间匹配。0..1应具有可分辨的列名,为列制定命名约定,以确保引用和引用的表不具有多个匹配的列名。
    由ALMwConsult.net提供

    **重新检查您的表是否没有主键:*只需添加主键,然后删除并重新将表添加到edmx,它应该可以工作

    如果您没有处理表中的主键,则此问题 在MVC中更新和插入记录数据库时肯定会发生


    用户未处理DbUpdate异常

    我在可更新视图中遇到此问题。发现解决了我的问题

    因此,我的视图的基础表确实定义了主键,但EF不知道PK中有哪些列,因为实体是在视图上构建的。这里的技巧是“说服”EF您的视图可以作为表更新。 步骤与上述答案几乎相同:

  • 在edmx文件上单击鼠标右键,选择“使用XML编辑器打开”
  • 在edmx:StorageModels元素中找到实体
  • 完全删除
    部分
  • 将存储重命名:Schema=“dbo”为Schema=“dbo”
  • store:Type=“Views”
    更改为
    store:Type=“Tables”

  • 开发db第一个mvc应用程序。问题是我忘了为表定义主键。通过使用alter命令添加主键并更新DAL(edmx)来解决此问题。

    我的表在sql表设计中没有主键。添加了它并解决了。

    我也有同样的问题,但我不确定选择哪个列作为主键,因为在所有文章中都说映射表必须是只有两个外键的表,添加一些列只会破坏这种多对多关系。例如,我有两个表Projects and Clients和Project_Client表,其中有两个列,外键为ClientId上的ProjectId second。那么我必须在哪里设置主键呢?是的,作为评论有点延迟,但是这个答案和下面的内容帮助了我。谢谢你这么做!我希望有人能解释一下如何创建插入/更新函数……我能给你一个+50吗,多年来一直忽略这个问题,有时我的表在“从数据库更新”后塞满了,所以我恢复了更改,直到今天才知道,希望我在几年前就知道了…也考虑改变<代码> EDMX:SturaSchemDels/Schema/EntityContainer@Name和
    edmx:映射/映射/EntityContainerMapping@StorageEntityContainer
    attributes on real database schema-这对我的情况很有帮助。谢谢你,我不会在需要的时候得到它。并非所有的表都需要主键。确切地说,如果您想插入或更新这样的表(审计表),请使用触发器代替主键。谢谢!您可以定义问题的实际原因。非常感谢你的描述。请阅读这篇文章。更新DAL(edmx)意味着什么。我们应该怎么做