EF Core 2.1.Загрузка вложенных сущностей с объединением таблиц - PullRequest
0 голосов
/ 03 октября 2018

У меня есть следующие модели:

public class Transfer
{
    public Article Article { get; set; }
    public Branch BranchFrom { get; set; }
    public Branch BranchTo { get; set; }
    public User User { get; set; }
}

 public class Article
{
    public int Id{ get; set; }
    public string Description { get; set; }
}

 public class Branch
{
    public int Id { get; set; }
    public string Address { get; set; }
}

 public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Мне нужно получить список всех переводов, сделанных конкретным пользователем, и загрузить все связанные с ним объекты (BranchFrom, BranchTo, Article, User).

В EF 6 мне было легко это сделать с помощью этого кода:

_dbContext.Transfer.Include(x=>x.BranchFrom).Include(x=>x.BranchTo).Include(x=>x.Article).Include(x=>x.User).Where(x=>x.User.Id == userId).ToListAsync();

Учитывая, что в EF Core 2.1 вы должны определить соединительные таблицы, я добавил их следующим образом:

public class TransferUser
{
    public int TransferId { get; set; }
    public int UserId { get; set; }
    public Transfer Transfer { get; set; }
    public User User { get; set; }
}

 public class TransferArticle
{
    public int TransferId { get; set; }
    public int ArticleId { get; set; }
    public Transfer Transfer { get; set; }
    public Article Article { get; set; }
}

 public class TransferBranchFrom
{
    public int TransferId { get; set; }
    public int BranchId { get; set; }
    public Transfer Transfer { get; set; }
    public Branch Branch { get; set; }
}

 public class TransferBranchTo
{
    public int TransferId { get; set; }
    public int BranchId { get; set; }
    public Transfer Transfer { get; set; }
    public Branch Branch { get; set; }
}

И поэтому я изменил модель переноса так:

public class Transfer
{
    public TransferArticle TransferArticle { get; set; }
    public TransferBranch TransferBranchFrom { get; set; }
    public TransferBranch TransferBranchTo { get; set; }
    public TransferUser TransferUser { get; set; }
}

Теперь я не знаю, каким должен быть запрос.

Я былделает это так, и это работает, но загружает только передачу и пользователя

_dbContext.Transfer.Include(x=>x.TransferUser).Where(x=>x.TransferUser.UserId == userId).ToListAsync();

Когда я добавляю другую таблицу, она не работает и выдает исключение:

_dbContext.Transfer.Include(x=>x.TransferUser).Include(x=>x.TransferBranchFrom).Where(x=>x.TransferUser.UserId == userId).ToListAsync();

Я не могунайдите примеры загрузки всех сущностей для этого сценария

...