错误:主键值之一的类型与实体中定义的类型不匹配

时间:2019-10-05 22:50:31

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

我不确定为什么会出现此错误。我以前有过它,现在没有了。这是内部异常错误消息:

EntitySqlException:参数类型'Edm.Int32'和'Edm.String'与该操作不兼容。在WHERE谓词附近,第1行,第78列。

这是单行代码:

Attending attending = db.Attendings.Find(userId);

这是控制器上下文中的代码:

public ActionResult Attendees(int? id)
    {
        var userId = User.Identity.GetUserId();

        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Attending attending = db.Attendings.Find(userId);
        if (attending == null)
        {
            return HttpNotFound();
        }
        PopulateBeverageDropDownList(attending.BeverageId);

        return View(attending);
    }

我已经查看了stackoverflow和Google的所有内容,但是即使我发现了类似的问题,我仍然不知道该如何解决自己的问题。

基本上,我想做的是同时使用我的模型之一中的PK和asp.net身份中的userId。过去工作正常,除非我不知道发生了什么更改以使此错误弹出。这是到我的存储库的链接,以查看整个代码:https://github.com/alec9876/Firepit/tree/master/Firepit

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

Find用于通过主键获取实体。对于Attendees模型,主键是AttendeeID,与userId不同,主键是int。 如果要通过其ID获得Attending,则只需将id变量传递给Find。如果您想获得某个用户的Attendings,则可以获取该用户的AttendeeID,然后使用Where来获取Attendings,例如:

 db.Attendings.Where(x => x.AttendeeId == attendeeId)