2015-07-12 3 views
0

Я сохранил профиль пользователя в другой таблице, называемой агентом. Таблица агента не содержит никакого свойства навигации, так как я не смог найти способ сохранить идентификатор пользователя в таблице агентов (в примерах из msdn, даже если они этого не сделали).Использование выражения Lambda для сравнения идентификатора пользователя (MVC 5, Identity)

Агент имеет много пакетов, и теперь у меня есть представление пакетов создания. Я хотел сохранить зарегистрированный идентификатор агента, чтобы получить его в Пакетах. Таким образом, в контроллере пакета в сообщении Создать ActionResult, я делаю что-то вроде этого:

var user = adb.Users.Where(p => p.Id == User.Identity.GetUserId()).Single(); 
     var agent = db.Agents.Where(p => p.ID == user.Agent.ID).Single(); 

(у меня есть 2 DataContext, один из пользователей приложений, и один я получил от datafirst EF, я пытался их слиянием , но я получил ошибки.)

Я получаю ошибки.

System.InvalidOperationException

+0

, что user.identity.getUserId() вытащить его и присвоить id переменной –

+0

Да, это сработало! – gasmsk

ответ

0

Enumerable.Single возвращает единственный элемент последовательности и генерирует исключение, если не существует ровно один элемент в последовательности. Он выбрасывает InvalidOperationException, потому что входная последовательность содержит более одного элемента ИЛИ входная последовательность пуста.

0

Вместо использования Enumerable.Single, я бы рекомендовал использовать SingleOrDefault. Этот метод возвращает значение null, если в элементе Enumerable нет элементов, а не InvalidOperationException. Затем вы можете проверить нулевое значение и предпринять соответствующие действия, если в Enumerable нет записи.

Ref https://msdn.microsoft.com/en-us/library/vstudio/bb342451(v=vs.100).aspx

0

Я думаю, что проблема в данных таблицы (пользователей, агентов). Если вы ищете по Id, я надеюсь, что это ключ для таблиц, поэтому я решил, что вы не добавляли одинаковые записи в одну таблицу, поэтому мы можем удалить вариант с дубликатами. Если вы используете User.Identity.GetUserId(), это дает основание для решения, что ваша учетная запись пользователя уже существует, а данные в таблице «Пользователи» являются нормальными. InvalidOperationException в тех местах, где вы можете получить, если есть дубликаты или данные не существуют. Варианты с дубликатами оставлены, и я надеюсь, что вы используете ID, как ключ для таблицы, так что ваша проблема: у вас нет пользователей в таблице Agent с ID, которую вы получаете от user.Agent.ID. Два способа: неправильные данные в Агенте или вы получаете неправильный идентификатор от user.Agent.ID (может быть, проблема с отображением). Попробуйте создать для него нового пользователя и нового агента и запустите свой код. Вы уверены, что для всех пользователей должен быть агент?

+0

Все пользователи могут быть либо Агентом, либо Клиентом. Но единственная проблема заключается в том, что я должен сохранять как агента, так и клиента отдельно, поскольку данные не совпадают. Таким образом, реальная проблема для меня, я думаю, заключается в том, как я могу сделать ключ идентификатора пользователя, чтобы стать внешним ключом и первичным ключом в Agent? – gasmsk

Смежные вопросы