我正在构建一个在线购物网络应用程序。 我有四个实体:
请帮我设计类,以便保持正确的关系(主键和外键)。 我尝试过这样做,但数据库本身正在创建导致不一致的外键。
我的课程:
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
字段作为外键本身。
答案 0 :(得分:1)
您的问题是您在List<Product> Products
旁边使用Order
。我的理解这个属性不应该在这里。您应该创建另一个包含OrderItem
的{{1}}表。您可以下载NorthWind数据库以获得更多信息。
回归你的问题。您应该从类List<Product> Product
中删除List<Product> Products
属性并重新生成数据库。
答案 1 :(得分:0)
有很多问题:
导航属性上的虚拟缺失
考虑引入OrderItem表,或者在Order表中每个Item需要一个代理键
如果您想自己创建ForeignKey ID字段,则需要使用Annotation或Fluent API来告知EF。
这里解释得很好 Entity Framework Guide
答案 2 :(得分: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; }
}
这为我提供了完美的数据库设计。