0

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

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

在我的订单模型中,一个用户可以进行多个订单,因此我userID在订单表中声明为外键cartID(因为订单属于购物车)。

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

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

用户型号:

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; }
}

订购型号:

公共类订单 { public int Id { 获取;放; } 公共 int CartID { 获取;放; } 公共购物车购物车 { 获取;放; }

    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;}
}

我的模型类的设计是否正确?

我应该ICollection<Order>User模型中包含一个用户可以有多个订单吗?

我应该声明UserAddress为一个单独的模型类来映射用户及其地址吗?

我的Cart模型与用户(使用userid)映射,因为每个用户都有自己的购物车,所以userID在购物车和订单模型中重复(有什么方法可以消除这种依赖关系)还是正确的?

4

1 回答 1

0

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

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

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

我会将 ICollection 包含在用户中,而不会从 Order 中删除“用户属性”。您可以同时拥有这两种导航,在数据库级别,什么都不会改变。

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

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

于 2020-07-14T23:33:25.443 回答