У меня есть самореферентные отношения между многими и пользователями, которые выглядят так:
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».