多对多关系实体框架核心db优先
Posted
技术标签:
【中文标题】多对多关系实体框架核心db优先【英文标题】:Many to many relationship entity framework core db first 【发布时间】: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 获取与我的产品相关的标签?
抱歉,我的英语水平很低。
【问题讨论】:
我想这可能会帮助你。 learnentityframeworkcore.com/configuration/… 【参考方案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 如果它适合您并解决您真正的问题,请接受答案。否则,请告诉我,我会改进/扩展它以上是关于多对多关系实体框架核心db优先的主要内容,如果未能解决你的问题,请参考以下文章