使用Lambda表达式比较用户Id (MVC 5, Identity)
本文关键字:MVC Identity Id Lambda 表达式 比较 用户 使用 | 更新日期: 2023-09-27 18:02:16
我将用户配置文件存储在另一个名为Agent的表中。Agent表不包含任何导航属性,因为我找不到在Agents表中存储用户id的方法(在msdn的示例中,即使他们没有这样做)。
Agent有许多包,现在我有一个创建包视图。我希望存储已登录代理的ID,以便存储在包中。所以在Post创建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个数据上下文,一个来自应用程序用户,一个我从数据第一EF,我试图合并它们,但我得到了错误。)
我得到错误。
系统。InvalidOperationException
可枚举对象。Single返回序列中唯一的元素,如果序列中没有一个元素,则抛出异常。它抛出InvalidOperationException,因为输入序列包含多个元素,或者输入序列为空。
不使用Enumerable。单,我建议使用SingleOrDefault。如果Enumerable中没有元素,则此方法返回null,而不是InvalidOperationException。然后,您可以检查空值,并在Enumerable中没有条目时采取适当的操作。
Ref https://msdn.microsoft.com/en-us/library/vstudio/bb342451 (v = vs.100) . aspx
我认为问题是在表数据(用户,代理)。如果你通过Id
搜索,我希望它是表的键,所以我决定你没有在一个表中添加相同的记录,所以我们可以删除有重复的变体。如果您使用User.Identity.GetUserId()
,它将为确定您的用户帐户已经存在以及Users表中的数据是否正常提供背景。InvalidOperationException
在那些地方,你可以得到,如果有重复或数据不存在。有重复的变体是留下的,我希望你使用ID
键表,所以你的问题是:你没有任何用户在Agent
表与ID
,你从user.Agent.ID
得到。两种方式:Agent中的错误数据或您从user.Agent.ID
获得错误的Id(可能是映射问题)。尝试为他创建新的User和新的Agent并运行您的代码。您确定所有用户都应该是代理吗?