首先在代码中设计类Entity Framework

时间:2013-05-14 16:04:23

标签: asp.net entity-framework-4 ef-code-first data-annotations code-first

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

  1. 客户
    • CusomerId
    • 名称
    • 地址
    • 电话
  2. 类别
    • 类别ID
    • 分类
  3. 产品
    • 产品编号
    • 名称
    • 价格
    • 分类
  4. 订单
    • 的OrderId
    • 客户ID
    • 产品编号
    • 数量
    • 金额
  5. 请帮我设计类,以便保持正确的关系(主键和外键)。 我尝试过这样做,但数据库本身正在创建导致不一致的外键。

    我的课程:

    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字段作为外键本身。

3 个答案:

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

这为我提供了完美的数据库设计。