【问题标题】:Entity Framework 4 Error: Unable to update the EntitySet because it has a DefiningQuery实体框架 4 错误:无法更新 EntitySet,因为它有一个 DefiningQuery
【发布时间】:2010-08-12 19:35:24
【问题描述】:

好的,这就是场景。我有 3 张桌子。一个叫做 aspnet_Users 一个叫做 Categories 和一个叫做 User_Categories 的链接表。 aspnet_Users 和 Categories 都有主键(分别是 UserId 和 ID)。链接表只有两列:CategoryID 和 UserId,每列都有外键关系设置,并且我为 User_Categories 上的两列设置了唯一键。这在 aspnet_Users 表和 Categories 表之间建立了多对多的关系。我从这个数据库设置中生成了我的实体 edmx 文件,一切看起来都很完美,几乎适用于所有操作。

我想要做的是从表单中添加一个新类别(它自己完美地工作),同时,将特定用户与新提交的类别相关联。当我尝试这样做时,我的主题行中出现错误。这是我用来尝试的代码(ctx 是我的实体上下文对象):

public ActionResult Create(Category category, Guid userId)
{
    aspnet_Users user = ctx.aspnet_Users.SingleOrDefault(x => x.UserId == userId);
    ctx.Categories.AddObject(category);
    user.Categories.Add(category);
    ctx.SaveChanges();;
    return RedirectToAction("Index");
}

为什么这不起作用?

【问题讨论】:

    标签: .net entity-framework entity-framework-4


    【解决方案1】:

    我假设完整的异常消息类似于:

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

    如果您的数据库表没有定义主键,就会发生这种情况。

    向您的表添加一个主键(使用 SQL Server Management Studio 或其他),并从数据库中更新您的 .edmx 模型。

    【讨论】:

    • 如果你在 View 而不是 Table 上得到这个会发生什么!
    • @Necronet,抱歉我不能说。视图也可以定义键,对吧?你的观点有定义吗?
    • 是的,但 EF 似乎在自动设置我的密钥(而且也是随机设置的),我尝试使用 XML 编辑器编辑 dmx,但每次我更新它时都会重新设置密钥,不知道为什么.. .
    • 在 FK 映射多对多表上不应该有主键。
    【解决方案2】:

    错误:无法更新 EntitySet,因为它有一个 DefiningQuery

    两次我得到这个错误,两次我到处寻找答案,最后我的映射搞砸了,或者数据库没有主键或其他东西。我建议检查一下...

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,我通过以下链接修复了:

      我根据第三个链接的内容删除了 .edmx 中的 DefiningQuery 部分。然后一切都像魅力一样发挥作用。

      【讨论】:

      • 这在数据库优先模型中是不可持续的。更新模型将消除更改。
      【解决方案4】:

      在映射表上放一个复合主键,这将告诉 EF 正确处理它。

      【讨论】:

        猜你喜欢
        • 2012-11-30
        • 2012-09-01
        • 1970-01-01
        • 2011-11-26
        • 2011-01-31
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多