我有实体Products和Tags。我有两个表之间的多对多关系,所以我有第三个表。
我的产品实体:
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; }
}
如何使用实体框架核心获取与我的产品相关的标签?
对不起,我的英语水平很低
据我所知,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();
取决于您的要求。
此外,您可以显式地编写联接,它的工作速度会快一点。