Возврат класса модели EF

#entity-framework #asp.net-mvc-3 #ef-code-first

#entity-framework #asp.net-mvc-3 #ef-code-first

Вопрос:

Я могу успешно вернуть модель из моего контроллера следующим образом:

 return View(lemonadedb.Messages.ToList() );
  

На мой взгляд, это прекрасно интерпретируется.

Теперь я хочу показывать сообщения только там, где Messages.user == Membership.getUser().toString().

Но когда я делаю это:

 return View(lemonadedb.Messages.Where( p => p.user == Membership.GetUser().ToString()).ToList());
  

Я получаю:

Система «LINQ для сущностей не распознает метод».Метод String toString()’, и этот метод не может быть преобразован в выражение хранилища.’

Мне нужен какой-то способ сузить результаты таблицы сообщений.

Должен ли я как-то использовать метод find ()? Я думал, что это только для идентификаторов.

Как я должен это сделать?

Комментарии:

1. Выстрел … Я только что понял, что нелегко возвращать и обрабатывать несколько моделей. Я думаю, мне следует использовать механизм ViewData.

Ответ №1:

Причина, по которой у вас возникла эта проблема, заключается в том, что Entity Framework пытается вычислить выражение Membership.GetUser().ToString() в SQL-запросе. Вам нужно создать новую переменную, чтобы сохранить значение этого выражения и передать его в ваш запрос. Затем Entity Framework просто интерпретирует это так, как вы ожидаете.

Должно сработать следующее:

 var user = Membership.GetUser().ToString();
return View(lemonadedb.Messages.Where(p => p.user == user).ToList());
  

Я подозреваю, что это очень распространенная ошибка, которую люди допускают при написании запросов Entity Framework.