0

我正在构建在线购物Web应用程序。 我有四个实体:设计代码第一个实体框架实体框架

  1. 客户
    • CusomerId
    • 名称
    • 地址
    • 电话
  2. 类别
    • 类别编号
    • 类别
  3. 产品
    • 产品编号
    • 名称
    • 价格
    • 类别
  4. 订购
    • 的OrderId
    • 客户编号
    • 产品编号
    • 数量
    • 金额

请帮我设计类,以便正确的关系(主键和外键)保持。 我试过这样做,但数据库本身正在创建导致不一致的外键。

我的课表:

public class Category  
{  
    public int CategoryId { get; set; } 
    public string CategoryName { get; set; }  
} 

public class Customer  
{  
    public int CustomerID { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public string Email { get; set; } 
    public string Password { get; set; }  
} 

public class Order  
{  
    public int CustomerID { get; set; } 
    public int OrderID { get; set; } 
    public DateTime PurchaseDate { get; set; } 
    public string ProductName { get; set; } 
    public List<Product> Products { get; set; } 
    public List<Customer> Customers { get; set; }  
} 

public class Product  
{  
    public int ProductId{ get; set; } 
    public string ProductName { get; set; } 
    public int Price { get; set; } 
    public string Category { get; set; } 
    public List<Category> Categories { get; set; }  
} 

的问题是在决定哪些应该进行主键和外键,怎么样? 当前数据库正在将Product表中的order_orderid字段作为外键自身添加。

+0

您应该显示从EF生成的图像数据库。这将有助于你得到正确的答案。 – 2013-05-14 16:07:16

+0

@ToanVo:我用一些代码更新了我的问题,请看看你能帮忙吗? – 2013-05-14 16:19:27

回答

0

您的问题是您在Order旁边使用List<Product> Products。我的理解是这个属性不应该在这里。您应该创建另一个表格OrderItem,其中将包含List<Product> Product。你可以下载NorthWind数据库来获得更多的理解。

回复你的问题。您应该从类Order中删除List<Product> Products属性并重新生成数据库。

0

有许多的问题:

  • 虚拟缺少导航性能

  • 考虑引入一个OrderItem的表或者需要每个项目代理键,以便表

  • 如果您想自己创建ForeignKey ID字段,则需要使用Annotation或Fluent API来向EF通知。

。这里很好地解释 Entity Framework Guide

0

我解决了它自己,它现在能正常工作。这里是类:

public class Category 
{ 
    public int CategoryId { get; set; } 
    public string CategoryName { get; set; } 
} 


public class Customer 
{  
    public int CustomerID { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public string Email { get; set; } 
    public string Password { get; set; } 
} 

public class Product 
{ 
    public int ProductId{ get; set; } 
    public string ProductName { get; set; } 
    public int Price { get; set; } 
    public int CategoryId { get; set; } 
    public virtual Category Categories { get; set; } 
} 

public class Order 
{ 
    public int CustomerID { get; set; } 
    public int OrderID { get; set; } 
    public int ProductId { get; set; } 
    public DateTime PurchaseDate { get; set; } 
    public string ProductName { get; set; } 
    public int Price { get; set; } 
    public string DeliveryStatus { get; set; } 
    public virtual Product Products { get; set; } 
    public virtual Customer Customers { get; set; } 
} 

这给了我完美的数据库设计,因为我想。