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



我有实体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();

取决于您的要求。

此外,您可以显式地编写联接,它的工作速度会快一点。

相关内容

  • 没有找到相关文章

最新更新