使用 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
在购物车和订单模型中重复(有没有删除此依赖项的方法)还是正确的?
我对电子商务领域有一些了解。
我不会让订单有购物车的外键,我会复制它们共有的所有属性。这是因为购物车不应该有总计,如果产品价格发生变化,它可以动态变化,而订单必须有总计 属性,在购买订单后不能改变。通常您只想为用户提供一个购物车,因此在购买订单后您可以删除购物车。让 cartId 成为 userId 或依赖于它的东西(例如“defaultshopname”)是一种常见的做法,这样您就可以在只知道用户 ID 的情况下通过钥匙获取购物车。
让Order有一个地址的外键。用户可以更改地址,但与订单相关的地址是购买时使用的地址
我会将 ICollection 添加到用户而不从订单中删除“用户 属性”。您可以同时拥有两个导航,在数据库级别没有任何改变。
不需要 UserAddress 实体。 Entity Framework 管理导航,您不必为多对多关系手动声明“表”。
我会将用户留在购物车和订单中,因为正如我所说,我会将它们视为不同的实体。
我是 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
在购物车和订单模型中重复(有没有删除此依赖项的方法)还是正确的?
我对电子商务领域有一些了解。
我不会让订单有购物车的外键,我会复制它们共有的所有属性。这是因为购物车不应该有总计,如果产品价格发生变化,它可以动态变化,而订单必须有总计 属性,在购买订单后不能改变。通常您只想为用户提供一个购物车,因此在购买订单后您可以删除购物车。让 cartId 成为 userId 或依赖于它的东西(例如“defaultshopname”)是一种常见的做法,这样您就可以在只知道用户 ID 的情况下通过钥匙获取购物车。
让Order有一个地址的外键。用户可以更改地址,但与订单相关的地址是购买时使用的地址
我会将 ICollection 添加到用户而不从订单中删除“用户 属性”。您可以同时拥有两个导航,在数据库级别没有任何改变。
不需要 UserAddress 实体。 Entity Framework 管理导航,您不必为多对多关系手动声明“表”。
我会将用户留在购物车和订单中,因为正如我所说,我会将它们视为不同的实体。