实体框架一对多关系

时间:2012-07-16 16:46:07

标签: entity-framework ef-code-first domain-driven-design

您好我是Entity Framework的新手,这是我需要的,有两个类,让我们说“客户”和“订单”:

Class CustomerBE<br/>
{
    Public int CustomerID { get;set;}
    ...Other properties<br/>
}

Class OrderBE<br/>
{
    Public int OrderID{ get; set; }
    Public int CustomerID{ get;set;}
    Public CustomerBE Customer {get;set}
}

如何将订单映射到客户?,我已经阅读了其他一些帖子和其他一些例子,他们正在做的是在customerBE中创建一个订单的icollection,例如:

Class CustomerBE
{
    Public int CustomerID{get;set;}
    Public Virtual ICollection Orders<orderBE>{get;set;}
}

然后他们使用客户类中的订单集合映射客户以获得许多订单,但是,对于我不正确的类,该类的消费者将能够使用客户类的orders属性来访问客户的所有订单,我不知道让他们这样做:

ICollection<OrderBE> customerOrders = customer.Orders //I don't what this



在什么情况下我想得到所有的客户订单?,通常我们不会按照给定的标准(日期,状态等)对客户订单,所以不要使用那个属性,对我来说,我认为最好是使用订单存储库按给定条件访问客户订单,例如:


ICollection customerOrders = ordersRepository.GetCustomerOrdersByDate(customer.ID, Today.Date) //This is what i want, not orders = customer.oders


所以任何机构都知道如何使用代码优先方法在订单和客户之间进行映射,而无需在客户类中进行订单收集?

1 个答案:

答案 0 :(得分:1)

在DbContext类中使用Fluent API:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<OrderBE>().HasRequired(x => x.Customer);
}