实体框架:映射多对多

时间:2019-07-11 12:47:54

标签: entity-framework .net-core

在进行某种形式的网上商店的项目期间,我遇到了.NET后端的问题,该问题中我将实体框架代码优先与Fluent API结合使用。

在我的前端,可以创建订单并将其传递到我的后端,这些订单最终以Order对象的形式出现(下面的代码)。该订单包含一个用户和一个词典,用于存储项目及其订购数量。我当前的目标是将这些订单存储在数据库中以检索订单历史记录。 我的理解是,EF本身无法映射字典。作为一名学生并且大部分时间都在做前端工作,我真的不知道该如何解决。

我尝试将Dictionary转换为ItemWrappers的列表(包含Item和数量),并制作2个表:Order(OrderId,UserId)和OrderItem(OrderId,ItemId,Amount)。这会将多对多(用户到项目,订单从关系属性派生)转换为一对多(从订单到订单项目)。 我从纯粹的数据库角度理解这一点。如果我自己编写所有查询,我本来可以解决的,但是考虑到EF在其中添加了一些抽象,我有点迷失了。您如何建议我这样做?

代码被简化为仅显示类结构。 ID总是在添加时生成,并用作主键。

 public class User {

        public int Id { get; set; }
        public string Name { get; set; }
}

 public class Item {
        public int Id { get; set; }
        public string Name { get; set; }
}


public class Order {
        public IList<OrderItemWrapper> ItemsList { get; set; }
        //Either one of these 2
        public Dictionary<Item, int> Items { get; set; }

        public User User { get; set; }
        public int Id { get; set; }
}

public class OrderItemWrapper {
        public Item Item { get; set; }//Will use ItemId as key
        public int Amount { get; set; }
}

1 个答案:

答案 0 :(得分:1)

在这里,请您多多关照一下我的解释。 Is the following tree of SchoolContext correct?