2015-12-28 4 views
1

Я пытаюсь выяснить, как создать заявление о соединении в Identity и другую таблицу, которая у меня есть, в данном случае TeamMember.Присоединиться к Identity и другой таблице

Вот что я пробовал:

var j = 
    Db.TeamMembers.Join(MemberManager.Users, 
    c => c.MemberId, 
    cm => cm.Id, 
    (c, cm) => new {TeamMember = c, Member = cm}) 
    .Where(m => m.TeamMember.TeamId == team.Id && !m.TeamMember.MemberId.Equals(team.CaptainId)); 

List<TeamMember> teamMembers = new List<TeamMember>(); 
foreach (var result in j) 
{ 
    var teamMember = new TeamMember 
    { 
     GameDisplayName = result.Member.Alias 
    }; 
    teamMembers.Add(teamMember); 
} 

И ошибка, что у меня есть

Указанное выражение LINQ содержит ссылки на запросы, которые связаны с различными контекстами.

Описание: Необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

Сведения об исключении: System.NotSupportedException: указанное выражение LINQ содержит ссылки на запросы, связанные с различными контекстами.

ответ

1

Говорят, что MemberManager и Db - это разные объекты. Он должен был бы запросить один и передать результаты другому, чтобы сделать эту функцию (представьте, указали ли они на разные базы данных), и она не хочет этого делать по умолчанию, потому что это будет плохая идея чаще, чем не.

Простой вариант - это просто изменить MemberManager.Users на Db.Users. Если я правильно понял вашу установку, это должно ее исправить.

Это, я не понимаю, почему MemberManager существует вообще, так что, возможно, я этого не понимаю. В этом случае, вы должны сделать что-то вроде этого:

var team = /*...*/; 

var teamMembers = Db.TeamMembers 
    .Where(c => c.TeamId == team.Id && c.MemberId != team.CaptainId) 
    .ToList(); 

var teamMemberIds = teamMembers.Select(c => c.MemberId); 

var members = MemberManager.Users 
    .Where(c => teamMemberIds.Any(x => c.Id == x)) 
    .ToList(); 

var j = teamMembers 
    .Join(members, c => c.MemberId, cm => cm.Id, (c, cm) => new 
     { 
      TeamMember = c, 
      Member = cm 
     }); 

Было бы лучше, чтобы избежать этого, если вы можете, так как это два отдельных вызова сервера. Но это позволяет использовать несколько контекстов.

Смежные вопросы