实体框架代码首先是购物车

时间:2015-01-13 05:12:11

标签: c# entity-framework

我是实体框架的新手,我试图使用代码优先方法实现一个简单的购物车,我不明白为什么实体在下面以奇怪的方式生成表。这是我班级的缩减版本:

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

我不明白。我的目的是创建一个与特定购物车相关联的产品列表。我做错了什么。有人可以解决一些问题!

2 个答案:

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

你可以在这里阅读有关视图模型的信息

http://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB4QFjAA&url=http%3A%2F%2Frachelappel.com%2Fuse-viewmodels-to-manage-data-amp-organize-code-in-asp.net-mvc-applications&ei=EP20VNqDHcTkuQTqvYGoAw&usg=AFQjCNHdOjOFhZGuBiLHZJ0wBGsG9qQtXw&sig2=rSFNWzWstWP0z0yRDhuXXQ

答案 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种可能的关系:

  1. 一对一
  2. 一对多
  3. 多对多,但这里是创建一个间歇性表link

希望对您有用!