0

我有实体产品和标签。我有两张表之间的多对多关系,所以我有第三张表。

我的产品实体:

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; }
}

我的 ProductTags 实体:

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 获取与我的产品相关的标签?

对不起,我的英语知识很低。

4

1 回答 1

1

据我所知,最新版本不支持开箱即用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();

取决于你的要求。

此外,您可以显式编写连接,它会运行得更快一些。

于 2018-12-05T13:55:05.867 回答