0

我正在构建一个在线购物网络应用程序。我有四个实体:

  1. 顾客
    • 客户 ID
    • 姓名
    • 地址
    • 电话
  2. 类别
    • 类别 ID
    • 类别
  3. 产品
    • 产品编号
    • 姓名
    • 价格
    • 类别
  4. 命令
    • 订单编号
    • 客户ID
    • 产品编号
    • 数量
    • 数量

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

我的课程:

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

问题在于决定什么应该成为主键和外键以及如何?目前数据库本身order_orderid在表中添加字段Product作为外键。

4

3 回答 3

1

您的问题是您List<Product> ProductsOrder. 我的理解这个属性不应该在这里。您应该创建另一个表,OrderItem其中将包含List<Product> Product. 您可以下载NorthWind数据库以了解更多信息。

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

于 2013-05-14T16:40:23.093 回答
0

有很多问题:

  • 导航属性上的虚拟缺失

  • 考虑引入 OrderItem 表,否则您将需要 Order 表中的每个 Item 的代理键

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

这里解释得很好 Entity Framework Guide

于 2013-05-15T16:09:44.097 回答
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; }  
}

这给了我想要的完美数据库设计。

于 2013-05-15T16:36:56.030 回答