多对多关系实体框架核心数据库优先

时间:2018-12-05 01:17:52

标签: .net entity-framework .net-core entity-framework-core db-first

我有实体产品和标签。我在两个表之间有很多关系,所以我有第三表。

我的产品实体:

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

很抱歉,我的英语知识很差。

1 个答案:

答案 0 :(得分:1)

据我所知,EF Core 2.1.4的最新版本不支持{@ 1}}的多对多功能。因此,您应该明确拥有第3个表格(以您的情况为ProductTags)。

您可以找到映射配置示例here

如何获取与产品相关的标签?有很多方法可以做到,但是最合适的方法(使用EF和扩展方法)将是:

EF 6.2

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();

取决于您的要求。

此外,您可以显式编写联接,这样会更快一点。