'Sequence contains more than one element' 调用 DBContext Find 时

'Sequence contains more than one element' when DBContext Find is called

我正在为我的网络应用程序使用 MVC。在以下情况下需要帮助。

我的数据库中有 3 个表:

  1. 页面:包含页面列表。主键:ID_PAGE
  2. 角色:包含角色列表。主键:ID_ROLE
  3. Role_Page :包含页面列表及其相关角色。没有主键。只有 ID_PAGE & ID_ROLE.
  4. 的外键

然后将这些表映射到它们各自的模型类。

使用脚手架,我基于 'Role_Page' 模型创建了控制器和视图。

现在,在单击 'Edit' 时,我分别将 ID_ROLE 和 ID_PAGE 作为参数传递给 DBContext 的 'Find' 方法。

但是当调用该方法时我得到 'Sequence contains more than one element'。

非常感谢任何帮助和指点!


控制器代码:

public ActionResult Details(int? ID_ROLE, int? ID_JOB)
    {
        if (ID_ROLE == null || ID_JOB == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        ROLE_JOB rt_ROLE_JOB = db.ROLE_JOB.Find(ID_ROLE, ID_JOB);
        if (rt_ROLE_JOB == null)
        {
            return HttpNotFound();
        }
        return View(rt_ROLE_JOB);
    }

Find 需要一个主键。您正在尝试在没有主键的 table 上使用它。有问题。

你想要的是这样的:

YourContext.Role_Pages.Single(x => x.ID_PAGE == somePageID && x.ID_ROLE == someRoleID)

请注意,如果未找到记录或找到多于一条记录,Single 将抛出异常。您应该查看其他 LINQ 函数 - SingleOrDefaultFirstAnyWhere 等并酌情使用。

Find 需要提供 [Table] Primary Key 你也可以提供你的 key 作为谓词

DbContext.ROLE_JOB.Find(a => a.ID_ROLE== ID_ROLE);DbContext.ROLE_JOB.Find(a => a.Id == ID_ROLE && a.ID_JOB == ID_JOB);

如果成功找到,它会return给你一条记录。