我是实体框架的新手,我试图使用代码优先方法实现一个简单的购物车,我不明白为什么实体在下面以奇怪的方式生成表。这是我班级的缩减版本:
Product.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; }
}
因为这条线 公共虚拟列表产品{get;组; } 实体生成带有2个额外外键的Product表: ShoppingCart_ID&amp; ShoppingCart_ProductID
我不明白。我的目的是创建一个与特定购物车相关联的产品列表。我做错了什么。有人可以解决一些问题!
答案 0 :(得分:0)
如果您将ProductID作为购物车类中的一个属性,并且您在购物车中拥有虚拟产品集合,则EF已建立购物车与产品类之间的关系。
根据评论中的建议,您可以删除产品ID类,也可以创建视图模型类并在购物车和产品类之间建立关系。
示例视图模型可以是
public class ShoppingCartProduct
{
[Key]
[Column (Order=1)]
public int ID { get; set; }
[Key]
[Column(Order = 2)]
public int ProductID { get; set; }
}
你可以在这里阅读有关视图模型的信息
答案 1 :(得分:0)
最适合您的解决方案是使一个ShopingCart
类包含您所有的产品及其编号:
[Table("Cart")]
public class ShopingCart
{
[Key]
public int Id { get; set; }
public DateTime CreatedDate { get; set; }
public virtual ICollection<ItemCart> Products { get; set; } // relationship one-to-many
}
该类包含您的ItemCart
[Table("ItemCart")]
public class ItemCart
{
[Key]
public int Id { get; set; }
public int Quantity { get; set; }
public virtual Product Product { get; set; } // relationship one-to-one
}
如果您想了解更多信息,请访问此页面:entity-tutorial
并尝试简化思考:您只有3种可能的关系:
希望对您有用!