Ядро структуры отношения многих со многими ядром сначала - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть продукты и теги.У меня есть много ко многим отношениям между двумя таблицами, поэтому у меня есть третичная таблица.

Моя заявка на товар:

public class Product 
{
    public Guid Id { get; private set; }
    public string Name { get; private set; }
    public List<ProductTags> ProductTags { get; private set; }
}

Моя заявка на тег:

public class Tag
{
    public Guid Id { get; private set; }
    public string Description { get; private set; }
    public List<ProductTags> ProductTags { get; private set; }
}

Моя заявка на продукт:

public ProductTags
{
    public Guid ProductId { get; private set; }
    public Product Product { get; private set; }
    public Guid TagId { get; private set; }
    public Tag Tag { get; private set; }
}

Как я могу получить своюТеги, связанные с моим продуктом с использованием Entity Framework Core?

Извините за ошибки, мои знания английского языка очень низкие.

1 Ответ

0 голосов
/ 05 декабря 2018

Насколько я знаю, последняя версия EF Core 2.1.4 не поддерживает функцию "многие ко многим", как EF 6.2 из коробки.Следовательно, у вас должна быть явная третья таблица (в вашем случае - ProductTags).

Вы можете найти образец конфигурации сопоставления здесь

Как получить теги, связанные с продуктом?Есть десятки способов сделать это, но наиболее подходящим (используя EF и методы расширения) будет:

var tagsByProduct = await context.ProductTags
    .Where(item => item.ProductId == 100500)
    .Select(item => item.Tag)
    .ToListAsync();

или

var tagsByProduct = await context.ProductTags
    .Where(item => item.Product.Name == "ProductName")
    .Select(item => item.Tag)
    .ToListAsync();

или

var tagsByProduct = await context.ProductTags
    .Where(item => item.Product.Name == "ProductName")
    .Select(item => new { Id = item.Tag.Id, Description = item.Tag.Description })
    .ToListAsync();

зависит от ваших требований.

Более того, вы можете явно писать объединения, это будет работать немного быстрее.

...