【发布时间】:2015-01-13 05:12:11
【问题描述】:
我是实体框架的新手,我试图使用代码优先的方法实现一个简单的购物车,但我不明白为什么实体会以下面奇怪的方式生成表格。这是我的课程的精简版:
产品.cs
public class Product
{
[Key]
public int ID { get; set; }
public int ProductCategoryID { get; set; }
public string ProductNumber { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Specification { get; set; }
public string Color { get; set; }
public string Capacity { get; set; }
public string CapacityUnitMeasureCode { get; set; }
public decimal Price { get; set; }
public decimal Cost { get; set; }
public int Stock { get; set; }
}
ShoppingCart.cs
public class ShoppingCart
{
[Key]
[Column (Order=1)]
public int ID { get; set; }
[Key]
[Column(Order = 2)]
public int ProductID { get; set; }
public int Quantity { get; set; }
public DateTime CreatedDate { get; set; }
public virtual List<Product> products { get; set; }
}
因为这条线 公共虚拟列表产品{获取;放; } 实体生成带有 2 个附加外键的 Product 表: ShoppingCart_ID & ShoppingCart_ProductID
我不明白。我的目的是创建一个与特定购物车关联的产品列表。我在做什么我做错了。有人可以解释一下吗!
【问题讨论】:
-
首先,这一行“public int ProductID {get; set;}”不应该在 ShoppingCart 类定义中。删除它,看看会发生什么。其次,我希望有一个额外的表来保持购物车及其相关产品之间的关系。
-
这似乎解决了我的问题。将“public virtual List
products { get; set; }”替换为“public virtual Product Product { get; set; }”,这似乎更正了 ProductID 上的 FK 约束。而不是在 Product 表上添加其他键。 - 谢谢大家 -
我认为虽然这解决了您的问题,但它不会是您想要的设计。因为一个购物车可能包含多个产品。而且一个产品可以在不同的购物卡中,是多对多的关系。您需要一个额外的表格来反映这种关系
-
@Eric。实际上它应该可以工作,如您所见,ShoppingCart 类有一个复合 PK(ID,ProductID),而 ID 是 CardID,也是客户表的 FK。所以 yes 没有完全标准化,但是由于购物车项目来来去去(提交订单时)。所以我认为这不是问题。 - 感谢您的意见
标签: c# entity-framework