实体框架

时间:2010-09-18 12:36:02

标签: .net asp.net frameworks entity

嗨我有实体模型,让我们说3个实体就像所有相关的当然:

1.-----Costumers-------
  CustomerId
  CustomerName

2.----CustomersOrders-----
  CustomerId
  OrderId
  Total

3.---Orders------
  OrderId
  OrderName

我想在GridView中显示某些客户的订单,如下所示:

----------|----------
 OrderName|Total
----------|----------
My order  | 10000

但问题是实体数据源给我订单ID而不是名称如何使用它来获取订单的相关OrderName?

非常感谢....

1 个答案:

答案 0 :(得分:2)

我假设您已经定义了具有导航属性的三个实体,这些实体将Customers连接到CustomersOrders,CustomersOrders连接到Orders。如果不使用实体模型设计器,您可以在其中右键单击实体并添加实体之间的相关关联。请记住检查您是否正在生成导航属性。 如果模型上下文设置如此,则可以直接查询客户的订单。有几种方法可以做到这一点。其中一个可能是LINQ表达式:

using (var context = new MyEntityContext())
{
    var query = from customerOrder 
                in context.CustomersOrders 
                where customerOrder.CustomerId.Equals(myCustomerId) 
                select customerOrder;

    myGridView.ItemsSource = query.ToList();
}

这里我假设你在myCustomerId中有一个customerId。如果你只有一个名字,而不是一个Id,你可以这样做:

using (var context = new MyEntityContext())
{
    var query = from customerOrder 
                in context.CustomersOrders.Include("Orders") 
                where customerOrder.Customer.Name.Equals(myCustomerName) 
                select customerOrder;

    myGridView.ItemsSource = query.ToList();
}

在上面我假设您从CustomersOrders到Customer的导航属性称为“Customer”。 “包含”确保关联的订单被加载。如果没有包含,ToList调用将假定您不需要订单,并且您将无法在GridView中引用它们。

在网格视图中,您可以使用Path = Order.OrderName绑定到OrderName,并使用Path = Total绑定到Total。在这里,我假设您从CustomersOrders到Orders的导航属性称为“订单”。