【发布时间】:2018-12-20 12:17:58
【问题描述】:
尝试使用来自两个数据集的 ef 核心加入时出现 System.ArgumentNullException。
我正在使用 asp.netcore 的内置身份功能,我有两个上下文:MyDbContext 和 IdentityDbContext。我在 MyDbContext 中有一个 User 实体,它拥有一个 IdentityGuid,所以我可以知道哪个用户与哪个 IdentityUser 相关联。
我想做一个 Join 并获得一个 KeyValuePair 并将其作为 ViewModel 提供。
var users = _context.Users;
var identityUsers = _identityContext.Users;
var selection = users.Join(identityUsers,
u => u.IdentityGuid,
iu => iu.Id,
(u, iu) => new KeyValuePair<User, IdentityUser>(u, iu));
return View(await selection.ToListAsync());
执行 Join 会引发 System.ArgumentNullException,但是如果我在 Join 之前对两个数据集执行 ToList(),那么它就可以正常工作。这是例外:
ArgumentNullException:值不能为空。 参数名称:实体类型 Microsoft.EntityFrameworkCore.Utilities.Check.NotNull(T value, string parameterName)
【问题讨论】:
-
我不确定 EF Core 是否可以在两个数据库上下文中同时执行延迟执行(这正是您尝试使用此代码执行的操作)。但是,当
ToList()出现时,它会导致两个查询彼此独立地执行,所以它照常工作。
标签: c# linq asp.net-core entity-framework-core ef-core-2.1