【问题标题】:ASP.NET MVC w/ Entity Framework - UpdateException带有实体框架的 ASP.NET MVC - UpdateException
【发布时间】:2010-02-02 23:00:59
【问题描述】:

我在使用 Entity Framework 更新数据库中的对象时遇到问题。

首先,概念是:

用户可以是组的成员,因此组包含用户。

为了在数据库中建模,我有以下结构:

用户: ID 姓名 等等

组: ID 名称

小组成员: 组ID 用户ID

GroupMembers 中的两个字段都是与用户 ID 和组 ID 相关的外键。当我将它加载到实体框架中时,它被正确建模,因为 Group 对象有一个 User 对象列表,并且每个 User 对象都有一个 Group 对象列表。

但是,当我将用户添加到组时,我遇到了以下问题:

var group = DAO.GetGroup(GroupID);
var user = DAO.GetUser(UserID);
group.Users.Add(user);
conn.SaveChanges();

无法更新实体集 'GroupMembers' 因为它有一个 定义查询和否 元素存在于 元素 支持当前的操作。

我在网上看到了各种建议将 ID 字段添加到 GroupMembers 表的文章 - 但是如果我这样做,我会在 EF 中收到一个映射错误,抱怨 ID 没有映射到任何东西。

谁能提供一些其他建议或解决方法?

谢谢,

克里斯

【问题讨论】:

  • GroupMembers 的 PK 是什么?它应该是两列。你自定义了DefiningQuery 吗?
  • 不,我没有自定义 DefiningQuery,主要是因为我不知道将其更改为什么,并且不想对我已经拥有的东西产生更大的不利影响! GroupMembers 根本没有主键,我确实添加了一个“ID”列,但映射由于未正确映射而引发错误。

标签: asp.net-mvc entity-framework


【解决方案1】:

GroupMembers 中删除ID 列。为 GroupMembers 创建一个包含 both GroupIDUserID 的 PK。现在右键单击您的模型并从数据库中更新它。

EF 设计者需要知道GroupIDUserID 这对是唯一的,以便获得正确的基数。

【讨论】:

    【解决方案2】:

    通过将 GroupMembers 中的两个字段都设为主键,我现在可以添加到表中。

    感谢您的帮助:-)

    克里斯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      相关资源
      最近更新 更多