'序列包含多个元素'调用DBContext Find时

时间:2015-01-22 03:27:22

标签: c# asp.net-mvc entity-framework

我正在使用MVC作为我的网络应用程序。在以下场景中需要帮助。

我的数据库中有3个表:

  1. 页面:包含页面列表。主键:ID_PAGE
  2. 角色:包含角色列表。主键:ID_ROLE
  3. Role_Page:包含页面列表及其相关角色。没有主键。只有ID_PAGE&的外键。 ID_ROLE。
  4. 然后将这些表映射到各自的模型类。

    使用scaffolding,我根据' Role_Page'创建控制器和视图。模型。

    现在,点击'编辑',我将相应的ID_ROLE和ID_PAGE作为参数传递给'查找' DBContext的方法。

    但是我得到了'序列包含多个元素'何时调用该方法。

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


    控制器代码:

    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);
        }
    

2 个答案:

答案 0 :(得分:3)

Find需要主键。您试图在没有主键的表格上使用它。是问题。

你想要的是:

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

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

答案 1 :(得分:0)

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);

如果找到成功,它将返回一条记录。