EF Core Join из двух IQueryables выдает System.ArgumentNullException - PullRequest
0 голосов
/ 20 декабря 2018

Наличие System.ArgumentNullException при попытке соединения с ядром ef из двух наборов данных.

Я использую встроенную функцию идентификации asp.netcore, и у меня есть два контекста: MyDbContext и IdentityDbContext.У меня есть сущность User в MyDbContext, которая содержит 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());

При выполнении этого соединения генерируется исключение System.ArgumentNullException, однако, если я сделаю ToList () для обоих наборов данных перед объединением, то все будет работать нормально.Вот исключение:

ArgumentNullException: значение не может быть нулевым.Имя параметра: entityType Microsoft.EntityFrameworkCore.Utilities.Check.NotNull (значение T, строковое параметрName)

1 Ответ

0 голосов
/ 20 декабря 2018

Как отметил Майами в своем комментарии, EF Core не поддерживает перекрестные соединения с отложенным выполнением.Один (или оба) из них должен будет вызвать .ToList(), чтобы они оба были оценены и помещены в локальную память для объединения.

Теоретически это также можно сделать, написав объединение sqlвручную и с помощью EF для выполнения (поскольку это позволило бы перекрестное соединение), но обычно решение должно заключаться в том, чтобы вытянуть данные в локальную область с помощью .ToList(), а затем объединить.

К сожалению, перекрестные объединениякак это не поддерживается, хотя я не верю, что они находятся в NHibernate, так что это мое полное ограничение

...