我已将用户个人资料存储在另一个名为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
答案 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(可能是映射问题)。尝试为他创建新的用户和新代理并运行您的代码。您确定所有用户都应该是代理吗?