Ошибка: тип одного из значений первичного ключа не соответствует типу, определенному в объекте - PullRequest
1 голос
/ 06 октября 2019

Я не уверен, почему я получаю эту ошибку. Раньше это работало, а сейчас нет. Это внутреннее сообщение об ошибке исключения:

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

Я просмотрел весь стекопоток и Google, но, хотя я нахожу похожие проблемы, я все еще не могу понять, как решить свою собственную.

По сути, я пытаюсь сделать этоодновременно используйте PK из одной из моих моделей и идентификатор пользователя из удостоверения asp.net. Раньше это работало нормально, за исключением того, что я не знаю, что изменилось, чтобы всплыла эта ошибка. Это ссылка на мой репозиторий для просмотра кода в полном объеме: https://github.com/alec9876/Firepit/tree/master/Firepit

Любая помощь приветствуется!

1 Ответ

1 голос
/ 06 октября 2019

Найти используется для получения объекта через его первичный ключ. Для модели Attendees первичный ключ - AttendeeID, что, в отличие от userId, int. Если вы хотите получить Attending по его идентификатору, вы можете просто передать переменную id в Find. Если вы хотите получить Attendings пользователя, вы можете получить AttendeeID пользователя и использовать Где , чтобы получить Attendings, например:

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