Как сказать EF Core две модели используют одну и ту же таблицу? - PullRequest
0 голосов
/ 15 мая 2019

Я перевожу классическую базу данных SQL на EF core 2.2 и сталкиваюсь с проблемой. Я не новичок в EF, но я не понимаю, как это сделать ...

Вот проблема, у меня есть таблица Users, таблица Groups и таблица Members. Участники - это пользователи, которые составляют группы. Я упростил модели и сохранил только ключи:

public class User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public virtual ICollection<Group> Groups { get; set; }
}

public class Member
{
    [Key]
    public int UserId { get; set; }

    [ForeignKey(nameof(UserId))]
    public virtual User User { get; set; }

    [Key]
    public int GroupId { get; set; }

    [ForeignKey(nameof(GroupId))]
    public virtual Group Group { get; set; }
}

public class Group
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public virtual ICollection<Member> Members { get; set; }
}

В классическом SQL я могу объединять таблицы по ключу, но как я могу «перейти» с Users на Groups, как User.Groups?

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Хорошо, я решил это другим способом:

User.Groups = context.Groups.Where(g => g.Members.Any(m => m.UserId == x.Id)).Select(g => new GenericData
{
    Id = g.Id,
    Tag = g.Tag,
    Label = g.Name,
    Flag = g.Flag
}).ToList()

Где x это пользователь БД

Это работает так, но если кто-то может сказать мне, как сделать это так, как я хотел вначале, мне интересно это знать:)

0 голосов
/ 15 мая 2019

У пользователя уже есть группы, зачем вам включать группу в Member?не достаточно просто иметь пользователя?Если вам нужно прочитать участников из БД, вы можете прочитать их и использовать метод «Включить», чтобы добавить пользователя или группы в вашем случае.Что-то вроде этого сделает работу:

   var result = db.Members
                .Include(m => m.Groups)
                .Include(m => m.User)
...