使用Lambda表达式比较用户ID(MVC 5,身份)

时间:2015-07-12 19:59:36

标签: c# asp.net-mvc

我已将用户个人资料存储在另一个名为Agent的表中。 Agent表不包含任何导航属性,因为我找不到在Agents表中存储用户ID的方法(在msdn的例子中,即使他们没有这样做)。

代理有很多包,现在我有一个创建包视图。我想存储登录的代理程序ID以存储在程序包中。所以在Post Create 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

3 个答案:

答案 0 :(得分:0)

Enumerable.Single返回序列的唯一元素,如果序列中没有一个元素,则抛出异常。它抛出InvalidOperationException,因为输入序列包含多个元素或输入序列为空。

答案 1 :(得分:0)

我建议使用SingleOrDefault,而不是使用Enumerable.Single。如果Enumerable中没有元素而不是InvalidOperationException,则此方法返回null。然后,如果Enumerable中没有条目,则可以检查空值并采取适当的操作。

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

答案 2 :(得分:0)

我认为问题出在表格数据(用户,代理商)中。 如果你按Id搜索,我希望它是表的关键,所以我决定你没有在一个表中添加相同的记录,所以我们可以删除有重复的变体。如果您使用User.Identity.GetUserId(),则会给出背景信息,以确定您的用户帐户已存在且Users表中的数据是否正常。如果有重复项或数据不存在,您可以获得InvalidOperationException。留下了带有重复项的变体,我希望您使用ID类似于表的键,因此您的问题是:Agent表格中没有任何用户ID来自user.Agent.ID 1}}。两种方式:代理中的错误数据或从user.Agent.ID获得不正确的ID(可能是映射问题)。尝试为他创建新的用户和新代理并运行您的代码。您确定所有用户都应该是代理吗?

相关问题