在进行某种形式的网上商店的项目期间,我遇到了.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; }
}