使用 Microsoft Entity Framework Core 设计的购物车模型

Shopping cart models design with Microsoft Entity Framework Core

我是 Entity Framework Core 的新手。在我的购物车模型设计中,我在使用 Entity Framework 核心设计我的模型 classes 时有些困惑。

我已将地址集合分配给用户模型,因为一个用户可以有多个送货地址。

在我的订单模型中,一个用户可以有多个订单,所以我在订单 table 和 cartID 中将 userID 声明为外键(因为订单属于推车)。

在处理订单时,在我看来,我的要求是用户应该能够 select 从下拉列表中找到他方便的地址。

这些是我在项目中的模型class:

用户型号:

public class User
{
    public int Id { get; set; }
    public string userName { get; set; }
    public string phone { get; set; }
    public string email { get; set; }
    public string password { get; set; }
    public Cart cart { get; set; }
    public ICollection<Address> Addresses { get; set; }
}

地址型号:

public class Address
{
    public int Id { get; set; }
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string County { get; set;}
    public string Eircode { get; set; }
    public int UserId { get; set; }
    public User user { get; set; }
}

订单型号:

publicclass订单 { public int Id { 得到;放; } public int CartID { 得到;放; } public购物车购物车{得到;放; }

    public bool IsDelivered { get; set; }

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

购物车 型号:

public class Cart
{
    public int Id { get; set; }
    public int UserId { get; set; }  
    public User user { get; set;}  
    public ICollection<CartProduct> CartProducts { get; set;}
}

我的模型设计 class 正确吗?

我是否应该在 User 模型中包含 ICollection<Order>,因为一个用户可以有多个订单?

我是否应该将 UserAddress 声明为单独的模型 class 用于映射用户及其地址?

我的 Cart 模型与用户映射(使用 userid),因为每个用户都有自己的购物车,所以 userID 在购物车和订单模型中重复(有没有删除此依赖项的方法)还是正确的?

我对电子商务领域有一些了解。

  1. 我不会让订单有购物车的外键,我会复制它们共有的所有属性。这是因为购物车不应该有总计,如果产品价格发生变化,它可以动态变化,而订单必须有总计 属性,在购买订单后不能改变。通常您只想为用户提供一个购物车,因此在购买订单后您可以删除购物车。让 cartId 成为 userId 或依赖于它的东西(例如“defaultshopname”)是一种常见的做法,这样您就可以在只知道用户 ID 的情况下通过钥匙获取购物车。

  2. 让Order有一个地址的外键。用户可以更改地址,但与订单相关的地址是购买时使用的地址

我会将 ICollection 添加到用户而不从订单中删除“用户 属性”。您可以同时拥有两个导航,在数据库级别没有任何改变。

不需要 UserAddress 实体。 Entity Framework 管理导航,您不必为多对多关系手动声明“表”。

我会将用户留在购物车和订单中,因为正如我所说,我会将它们视为不同的实体。