Entity Framework Code First «многие ко многим» не загружает связанные объекты, используя GUID - PullRequest
2 голосов
/ 08 июля 2011

У меня есть самореферентные отношения между многими и пользователями, которые выглядят так:

 public class User
    {
        public virtual Guid UserId { get; set; }
        public virtual string Username { get; set; }    
        public virtual ICollection<UsersManagers> Managers { get; set; }
    }

public class UsersManagers
{
    public int UsersManagersId { get; set; }
    public virtual Guid ManagerId { get; set; }
    public virtual Guid UserId { get; set; }
    public int ManagerRank { get; set; }

    [ForeignKey("ManagerId")]
    public virtual User Manager { get; set; }
}

Таким образом, пользователи могут иметь несколько менеджеров, которые могут быть отсортированы по рангу. Когда я заполняю свою базу данных и пользователя несколькими менеджерами, вот так:

        var user = u.All.Where(e => e.Username == "Neil").FirstOrDefault(); 

        UsersManagers c = new UsersManagers {ManagerRank = 1, ManagerId = manager1.UserId, UserId = user.UserId};
        UsersManagers c1 = new UsersManagers { ManagerRank = 2, ManagerId = manager2.UserId, UserId = user.UserId };

Все правильно создано в базе данных. В таблице UsersManagers есть 3 записи с правильными UserId, ManagerId и ManagerRank.

Когда я загружаю пользователя из своего репозитория и пытаюсь получить доступ к свойству Managers , коллекция пуста. Что я могу сделать, чтобы это исправить?

Любая помощь будет оценена.

Обновление:

Я добавил, включая менеджеров при загрузке пользователей, как предложено ниже. EF теперь возвращает неправильных менеджеров для неправильных пользователей. Вот данные из таблицы UsersManagers, она должна возвращать 4 менеджера для 1 пользователя, но она возвращает 1 менеджер для 4 пользователей.

UsersManagersId        ManagerId            UserId                       ManagerRank
1   2157B648-7FE3-4784-A742-687682672EE8    F603EB04-FF22-4E8E-8FB2-3AA12F3F6C8F    1
2   862C2E56-8DF2-4110-B6E4-534B8C0E8F75    F603EB04-FF22-4E8E-8FB2-3AA12F3F6C8F    2
3   A95AD9A2-6475-4B4C-925A-6C0522E9B004    F603EB04-FF22-4E8E-8FB2-3AA12F3F6C8F    3
4   A6D37381-2507-46E8-B84D-059A1B4F1020    F603EB04-FF22-4E8E-8FB2-3AA12F3F6C8F    4

Решение

Решением было изменение аннотации ForeignKey для Manager в UsersManager для использования «UserID».

1 Ответ

1 голос
/ 08 июля 2011

Вот пример кода, который загружает все сессии и связанные с ним отслеживания для программы в моем хранилище.

public Program GetById(int id)
{
    var entity = _context.Programs
        .Include(p => p.Sessions.Select(s => s.Trackings))
        .Single(p => p.ID == id);

     return entity;
}
...