0

Mit VS 2015, MVC 6 RC1 und EF 7 RC1 Ich versuche, eine Liste aller Benutzer mit ihren einzelnen Rollennamen zu erhalten.Liste der Benutzer mit ihrer einzigen Rolle in MVC 6 links beigetreten

Ich habe alle Vorschläge ausprobiert, die ich auf StackOverflow gefunden habe, aber keiner hat funktioniert.

Die SQL ich suche ist:

SELECT [User].[Email], [Role].[Name] 
FROM [User] 
LEFT JOIN [UserRoles] ON [User].[Id] = [UserRoles].[UserId] 
LEFT JOIN[Role] ON [UserRoles].[RoleId] = [Role].[Id] 

ich geschrieben habe, die unten und getestet auf LinqPad (funktioniert gut) und sollte in meinem Projekt gearbeitet haben, kommt aber mit einem Fehler auf:

var q1 = (from user in _context.Users 
      join ur in _context.UserRoles on user.Id equals ur.UserId into grp1 
      from fgrp1 in grp1.DefaultIfEmpty() 
      join r in _context.Roles on fgrp1.RoleId equals r.Id into grp2 
      from fgrp2 in grp2.DefaultIfEmpty() 
      select new { UserEmail = user.Email, UserRoleName = fgrp2.Name }).ToList(); 

Und die Fehlermeldung lautet:

An unhandled exception occurred while processing the request. 
InvalidOperationException: Sequence contains no elements 
System.Linq.Enumerable.Single[TSource](IEnumerable`1 source) 

ich weiß nicht, ob es einen Unterschied macht, aber ich habe cr meine eigene Rolle Entity eated als:

public class ExtranetRole : IdentityRole<int> { } 

und meine eigene User-Einheit als:

public class ExtranetUser : IdentityUser<int> { } 

Jede Hilfe/Vorschläge sehr geschätzt.

Antwort

0

EF7 RC1 haben einige Bugs, die mit LINK Joins verbunden sind. Überprüfen Sie https://github.com/aspnet/EntityFramework/issues/3629 - es sieht Ihrem Problem sehr ähnlich.

Ich denke, die beste Lösung bis EF Release ist nur alle drei Tabellen separat zu lesen und sie im Speicher mit Linq (zu Objekten) zu verbinden. Garantiert zu arbeiten :)

+0

Danke es sieht aus wie es ist ein Bug mit linken Joins. Ich habe erwartet, dass etwas so Grundlegendes an einer RC1 arbeitet. – GeoDev

Verwandte Themen