EF核心多对多关系和HTTP调用

时间:2018-10-11 22:00:02

标签: c# entity-framework-core

我目前有2个课程

public class Product 
{
        public int ProductID { get; set; }
        public string Name { get; set; }
        public double Price { get; set; }
        public double Height {get ; set; }
        public double Width {get ; set; }
        public double Depth {get ; set; }
        public ICollection<Part> Parts { get; set; }

}

public class Part
    {
            public int PartID { get; set; }
            public string Name { get; set; }
            public double Price { get; set; }
            public double Height {get ; set; }
            public double Width {get ; set; }
            public double Depth {get ; set; }
            public ICollection<Product> Products { get; set; }
    }

由于产品可以由多个部分组成,并且一个部分可以在许多产品中使用,因此具有多对多关系。

我了解到EF Core仍然无法自动处理此关系,因此我将拥有以下加入实体:

public class ProductPart
{
            public int ProductID { get; set; }
            public Product Product { get; set; }
            public int PartID { get; set; }
            public Part Part { get; set; }
}

我的问题是,当尝试回答以下对api的调用时,

api/Product/{id}/Parts //Parts used in Product with {id}
api/Product/{id}/PartsIn //Products in which Part with {id} is used

我是否必须编写一个ProductPartDTO并从Product控制器调用它?或者我该如何处理这些调用?

1 个答案:

答案 0 :(得分:0)

我在DbContext OnModelCreating中使用连接表处理此问题。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Product>()
                .HasMany(e => e.Parts)
                .WithMany(e => e.Products)
                .Map(m => m.ToTable("ProductParts").MapLeftKey("PartID").MapRightKey("ProductID"));
}

要注意的一件事,您提到HTTP调用,如果使用JSON,则由于自引用对象,JSON序列化程序在返回此数据时会遇到问题。返回结果时,您需要填充不会互相引用的DTO(数据传输对象)。