如何:添加对象作为项目数据源(实体框架)

可以创建基于 Visual Studio 应用程序中的对象的数据源。在将实体类型定义为项目中的数据源后,通过将**“数据源”**窗口中的项拖到窗体上即可创建显示实体数据模型 (EDM) 数据的窗体。这些项将成为窗体上绑定到该数据源的控件。有关更多信息,请参见将对象绑定到控件(实体框架)

在本主题中,您将为 Adventure Works 销售模型中的 SalesOrderHeader 类型创建一个数据源。然后,将使用此数据源创建一个 Windows 窗体,其中包含绑定到实体数据的控件。若要完成这些过程,必须已将 AdventureWorks 销售模型添加到您的项目中,并将项目配置为使用 实体框架。为此,请完成如何:使用实体数据模型向导(实体框架) 中的过程。

创建基于 SalesOrderHeader 类型的数据源

  1. 如果最近已添加实体数据模型 (EDM),则生成该项目。

  2. 在**“数据”菜单上单击“添加新数据源”**。

  3. 在**“选择数据源类型”页上,选择“对象”**。

  4. 在**“选择希望绑定到的对象”**页上,展开项目节点并找到 AdventureWorksModel 节点。

  5. 展开 AdventureWorksModel 节点,并在树视图中选择 SalesOrderHeader 类型。

  6. 单击**“完成”**。

    SalesOrderHeader 数据源随即添加到**“数据源”**窗口中。

将数据源绑定控件添加到 Windows 窗体

  1. 在**“数据源”**窗口中,依次展开 AdventureWorksModelSalesOrderHeader 节点。

  2. SalesOrderHeader 节点中的一个或多个属性拖到窗体上。

    这会在窗体上创建 salesOrderHeaderBindingSourcesalesOrderHeaderBindingNavigator 控件。此外,还会在窗体上为每个属性创建一个数据绑定控件,并附带经过相应命名的标签控件。

  3. SalesOrderDetail 导航属性拖到窗体上。

  4. 这会创建 salesOrderDetailBindingSource 控件,该控件的 DataSource 属性和 DataMember 属性分别设置为 salesOrderHeaderBindingSourceSalesOrderDetail。此外,还会在窗体上创建 salesOrderDetailDataGridView 数据绑定控件,并附带经过相应命名的标签控件。

将数据源绑定到对象查询的结果

  1. 打开窗体的代码页,并添加以下 using 语句(在 Visual Basic 中为 Imports):

    Imports System.Data.Objects
    Imports AdventureWorksModel
    
    using System.Data.Objects;
    using AdventureWorksModel;
    
  2. 在定义窗体的分部类中,添加创建 ObjectContext 实例并定义 customerID 常量的以下代码。

    Dim context As AdventureWorksEntities
    Const customerId As Integer = 277
    
    private AdventureWorksEntities context;
    private const int customerId = 277;
    
  3. 在窗体设计器中,双击窗体。

    这会打开窗体的代码页,并创建用于处理窗体的 Load 事件的方法。

  4. 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 窗体控件(实体框架)

概念

将对象绑定到控件(实体框架)
将实体数据绑定到控件(应用程序方案)