【问题标题】:Many to many relationship entity framework core db first多对多关系实体框架核心db优先
【发布时间】:2019-05-06 12:28:57
【问题描述】:

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

我的产品实体:

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

抱歉,我的英语水平很低。

【问题讨论】:

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


【解决方案1】:

据我所知,EF Core 2.1.4 的最新版本不支持多对多功能,因为 EF 6.2 已开箱即用。因此,您应该明确拥有第三张表(在您的情况下为 ProductTags)。

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

如何获取与产品相关的标签?有很多方法可以做到,但最合适的(使用 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();

取决于你的要求。

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

【讨论】:

  • @Evandro G. Santos 如果它适合您并解决您真正的问题,请接受答案。否则,请告诉我,我会改进/扩展它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
相关资源
最近更新 更多