如何:添加对象作为项目数据源(实体框架)
可以创建基于 Visual Studio 应用程序中的对象的数据源。在将实体类型定义为项目中的数据源后,通过将**“数据源”**窗口中的项拖到窗体上即可创建显示实体数据模型 (EDM) 数据的窗体。这些项将成为窗体上绑定到该数据源的控件。有关更多信息,请参见将对象绑定到控件(实体框架)。
在本主题中,您将为 Adventure Works 销售模型中的 SalesOrderHeader 类型创建一个数据源。然后,将使用此数据源创建一个 Windows 窗体,其中包含绑定到实体数据的控件。若要完成这些过程,必须已将 AdventureWorks 销售模型添加到您的项目中,并将项目配置为使用 实体框架。为此,请完成如何:使用实体数据模型向导(实体框架) 中的过程。
创建基于 SalesOrderHeader 类型的数据源
如果最近已添加实体数据模型 (EDM),则生成该项目。
在**“数据”菜单上单击“添加新数据源”**。
在**“选择数据源类型”页上,选择“对象”**。
在**“选择希望绑定到的对象”**页上,展开项目节点并找到 AdventureWorksModel 节点。
展开 AdventureWorksModel 节点,并在树视图中选择 SalesOrderHeader 类型。
单击**“完成”**。
SalesOrderHeader 数据源随即添加到**“数据源”**窗口中。
将数据源绑定控件添加到 Windows 窗体
在**“数据源”**窗口中,依次展开 AdventureWorksModel 和 SalesOrderHeader 节点。
将 SalesOrderHeader 节点中的一个或多个属性拖到窗体上。
这会在窗体上创建 salesOrderHeaderBindingSource 和 salesOrderHeaderBindingNavigator 控件。此外,还会在窗体上为每个属性创建一个数据绑定控件,并附带经过相应命名的标签控件。
将 SalesOrderDetail 导航属性拖到窗体上。
这会创建 salesOrderDetailBindingSource 控件,该控件的 DataSource 属性和 DataMember 属性分别设置为 salesOrderHeaderBindingSource 和 SalesOrderDetail。此外,还会在窗体上创建 salesOrderDetailDataGridView 数据绑定控件,并附带经过相应命名的标签控件。
将数据源绑定到对象查询的结果
打开窗体的代码页,并添加以下 using 语句(在 Visual Basic 中为 Imports):
Imports System.Data.Objects Imports AdventureWorksModel
using System.Data.Objects; using AdventureWorksModel;
在定义窗体的分部类中,添加创建 ObjectContext 实例并定义 customerID 常量的以下代码。
Dim context As AdventureWorksEntities Const customerId As Integer = 277
private AdventureWorksEntities context; private const int customerId = 277;
在窗体设计器中,双击窗体。
这会打开窗体的代码页,并创建用于处理窗体的 Load 事件的方法。
在 Load 事件处理程序中,复制并粘贴以下代码。
' Initialize the object context. context = New AdventureWorksEntities() Try ' Create a query for orders and related items. Dim orderQuery As ObjectQuery(Of SalesOrderHeader) = _ context.SalesOrderHeader _ .Where("it.CustomerID = @customerId", _ New ObjectParameter("customerId", customerId)) _ .Include("SalesOrderDetail") ' Set the data source of the binding source to the ObjectResult ' returned when the query is executed. SalesOrderHeaderBindingSource.DataSource = _ orderQuery.Execute(MergeOption.AppendOnly) Catch ex As EntitySqlException MsgBox(ex.Message) End Try
// Initialize the object context. context = new AdventureWorksEntities(); try { // Create a query for orders and related items. ObjectQuery<SalesOrderHeader> orderQuery = context.SalesOrderHeader .Where("it.CustomerID = @customerId", new ObjectParameter("customerId", customerId)) .Include("SalesOrderDetail"); // Set the data source of the binding source to the ObjectResult // returned when the query is executed. salesOrderHeaderBindingSource.DataSource = orderQuery.Execute(MergeOption.AppendOnly); } catch (EntitySqlException ex) { MessageBox.Show(ex.Message); }
此代码执行一个查询,该查询针对特定客户返回 SalesOrderHeader 和相关 SalesOrderDetail 对象的集合,并将 SalesOrderHeader 对象的集合绑定到 salesOrderHeaderBindingSource。
另请参见
任务
如何:将对象绑定到 Windows Presentation Foundation 控件(实体框架)
如何:将对象绑定到 Windows 窗体控件(实体框架)