@JoraInTheSky

Linq, связь многие ко многим в EF?

Есть бд реализована связь многие-ко-многим через промежуточную таблицу ProductRepo.
742940c398b048a684fce35b9eb771bc.JPG
После вкручивания бд в проект через EF, выходит бд без промежуточной таблицы со связью многие-ко-многим12658c0b452e417793d552e0759461d4.JPG

При таком запросе к бд:
Select Product.Name, Product.Price, Product.Count, Repository.Name
from Product, Repository, ProductRepo 
where Product.Id = ProductRepo.IdProduct AND Repository.Id = ProductRepo.IdRepository
получаю результат
6e7daf3434504462b7161176926086dc.JPG
который мне и необходимо.
Но, когда пытаюсь получить такой же результат через LINQ получается беда.
Такой вопрос уже был и в нем посоветовали сделать так:
var query = db.Products.Include(x => x.Repositories).ToList();

Но выдает такую ошибку:
4c981169f3d046ae9ba080ddaee9e283.png

При таком запросе:
var query = db.Products.Include("Repositories").ToList();

и передачи результата в представление выходит уже ближе к правде но:
fcf36ba470f9475bba9b6f27f2e46a0d.JPG
Но в дебаге показывает что есть нужное мне свойство:
c1c995891e6a4dc38784ba1e06882ccc.png
Вот теперь вопрос: как правильно написать запрос на LINQ что бы получать аналогичный этому
Select Product.Name, Product.Price, Product.Count, Repository.Name
from Product, Repository, ProductRepo 
where Product.Id = ProductRepo.IdProduct AND Repository.Id = ProductRepo.IdRepository

или как вытащить нужное мне свойство:
951cbecef1e2482dbdc3516d0232826c.png
  • Вопрос задан
  • 1214 просмотров
Решения вопроса 1
DarkRaven
@DarkRaven
разработка программного обеспечения
Вообще, тут несколько вариантов. Мы можете руками добавить нужную связывающую таблицу в контекст.

Или же сделать примерно так:

var data = db.Products.Include("Repositories");
var values = new List<ProductWithRepoDTO>();

foreach(var record in data)
{
    var reposArray = record.Repositories.Select(x=>x.Name).ToArray();
    var reposString = string.Join(",", reposArray);
    
    values.Add(new ProductWithRepoDTO
    {
        Id = record.Id,
        Name = record.Name,
        Cound = record.Count,
        Price = record.Price,
        Repository = reposString 
    });        
}
//дальше работать с values


Второй подход на мой взгляд правильнее, т.к. вы уже работаете не доменной моделью, а с моделью представления, которая уже содержит удобные для отображения данные.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@aynur_safin
Но выдает такую ошибку:
4c981169f3d046ae9ba080ddaee9e283.png


Подключите
using System.Data.Entity;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы