我尝试使用下表创建主 - 详细信息模型:
Orders
OrdID DATE CustID
========================================
1 01.01.2014 1
2 02.02.2014 2
3 03.03.2014 2
4 01.01.2014 4
OrderDetails
ID OrdID ProdID Quantity
========================================
1 1 1 2
2 1 2 1
3 2 3 3
4 2 4 5
现在我想要一个Orders DataGridView和一个OrderDetails Datagridview 订单DGV应如下所示:
Orders
OrdID DATE Customer Status
============================================
1 01.01.2014 CustOne 100%
2 02.02.2014 CustTwo 62.5%
并详细说明DGV(按所选订单过滤):
OrderDetails
ID Prod Quantity Status
======================================
1 ProdOne 2 100%
2 ProdTwo 1 100%
3 ProdThree 3 0%
4 ProdFour 5 100%
假设OrderDetail中的状态字段是根据其他3-4个表中的数据计算的。
这些表格显示在表格中,它们包含一些与产品/订单相关的详细信息(生产状态,供应商等)
我使用Dataset和Datatables完成所有这些操作,将数据库中的所有表格转换为数据集,然后使用Linq结果进行所有计算,以填充其他表格之间具有必要关系的表格,因此我可以使用bindingsources将它们绑定到datagridviews for master-detail 。
现在我试图用EF来实现这个目标。我的目标是最小化从数据库中获取的数据,并在内存中执行所有计算,而不是在数据库中执行
有没有办法在EF中创建一个模型,它包含我需要的文件,以及来自上下文的数据,而不是来自数据库。(我拉动产品表,客户表,OrdersTable ,OrderDetails表等从数据库进入Context。后面的Orders DataGridView的表是使用来自所有这些表的连接创建的。我不想使用StoredProcedures从数据库中获取此表中的数据,我想使用它来获取它Linq来自已经在上下文中的表格。
问题是:
我有实体:
Order with properties: OrdID, DATE, CustID
and navigation properties: Customer, Orders.
和实体:
OrderDetail with properties: ID, OrdID, ProdID, Quantity
and navigation properties: Order, Product.
如何向实体添加属性,并计算此属性,类似于数据表中的Expression。 如何在datagridview上显示Orders集合,在每一行上显示Customer信息。
答案 0 :(得分:1)
虽然回答你的问题还有很长的路要走,但我相信还有一种方法可以替代你想要实现的目标。
对于计算属性,您需要使用calculated属性创建一个Partial Class,但您需要确保首先填充导航属性:
'预填充数据并包含任何其他导航项
Dim Query = DataContext.Orders.Include("OrderDetails").Where(Function(t) t.OrderID = x)
'在OrderDetails实体上创建一个新的分部类,然后创建一个属性来计算状态:
Public Partial Class OrderDetails
Public ReadOnly Property Status As String
Return = (100 / Me.Quantity) & "%"
End Property
End Class
理想情况下,您应该为每个数据网格创建一个视图模型,然后在填充它时,您可以创建特定于数据网格的功能/计算属性,但是通过在模型上创建部分类,您可以在任何模型中重复使用它。应用