다음을 통해 공유


Adventure Works 데이터 바인딩(EDM 샘플 응용 프로그램)

AdventureWorks 데이터 바인딩 샘플은 Entity Framework를 사용하는 데이터 바인딩을 보여 줍니다. 데이터 모델은 AdventureWorks Sales 모델(EDM) 항목에 정의되어 있습니다. 이 응용 프로그램은 SalesOrderHeader 엔터티와 관련된 SalesOrderDetail 엔터티를 표시하고 수정합니다. 다음 그림은 SalesOrderDetail 엔터티를 SalesOrderHeader 및 백그라운드의 응용 프로그램 폼에 추가하는 데 사용되는 대화 상자를 보여 줍니다.

Adventureworks SalesModel DataBinding EDM

Entity Framework에서 데이터 바인딩

몇 줄의 코드로 ObjectQuery를 Windows form의 DataGridView 컨트롤에 데이터 바인딩할 수 있습니다. 먼저 ObjectQuery를 만듭니다. 그 다음, ObjectQueryDataGridViewDataSource 속성에 할당합니다.

다음 코드에서는 AdventureWorksSalesEntitiesObjectContext에서 제공된 ObjectQuery의 단일 SalesOrderHeaderDataGridView 컨트롤에 할당합니다. 텍스트 상자에서 SalesOrderHeaderID 번호를 구문 분석하여 쿼리의 매개 변수를 생성합니다. 이 매개 변수는 쿼리의 where 절에서 ID 번호와 일치하는 단일 SalesOrderHeader를 선택하는 데 사용됩니다. DataGridView 컨트롤의 DataSource 속성에 쿼리가 할당됩니다. 위 그림의 Windows Form에서 Sales Order Header 레이블과 함께 있는 상단의 DataGridView 컨트롤은 다음 코드 세그먼트의 데이터로 채워집니다. Execute 메서드를 사용하면 쿼리가 한 번만 실행됩니다.

ObjectParameter parameter =
            new ObjectParameter("p", Int32.Parse(textBoxOrderId.Text));
            dataGridViewSOHeader.DataSource =
                 objCtx.SalesOrderHeader.Where(
                "it.SalesOrderID == @p",
                 parameter).Execute(MergeOption.OverwriteChanges);

위 그림에서 Sales Order Details 레이블과 함께 있는 DataGridView 컨트롤은 다음 코드 세그먼트의 데이터로 채워집니다. SalesOrderHeaderSalesOrderHeaderSalesOrderDetail 속성에서 식별된 관련 SalesOrderDetail 엔터티의 컬렉션을 가집니다. SalesOrderDetail 속성은 실제로 EntityCollection입니다. 컬렉션은 BindingSource 컨트롤의 DataSource 속성에 할당될 수 있습니다. 그런 다음, BindingSourceDateGridView 컨트롤의 DataSource 속성에 할당됩니다.

    if(objCtx.SalesOrderHeader.Where(
                "it.SalesOrderID == @p", parameter).Any())
            {
                SalesOrderHeader resultHeader =
                    objCtx.SalesOrderHeader.Where(
                    "it.SalesOrderID == @p", parameter).First();

                resultHeader.SalesOrderDetail.Load();
                dataGridViewOrderDetails.DataSource = 
                    resultHeader.SalesOrderDetail;
            }

데이터 바인딩 시나리오에서의 수정

Sales Order Detail 데이터 표에 표시된 SalesOrderDetail 엔터티 중 하나가 변경되면 새 데이터를 저장소에 저장한 다음 데이터 바인딩된 SalesOrderHeader를 업데이트해야 합니다. 이 작업은 셀 편집 처리기에서 다음과 같은 코드 시퀀스로 수행됩니다.

먼저, ObjectContextSaveChanges 메서드를 사용하여 셀에 대한 변경 내용을 저장소에 저장합니다. 그 다음, ObjectQuery에서 SalesOrderHeader 엔터티를 검색합니다. 마지막으로 ObjectContextRefresh 메서드에서 DataGridControl에 대한 데이터 바인딩을 업데이트합니다. Refresh 메서드에서 저장소의 해당 데이터를 지정하는 RefreshMode.StoreWins 매개 변수는 ObjectContext의 데이터를 바꿉니다.

    objCtx.SaveChanges();

    ObjectParameter parameter =
            new ObjectParameter("p", Int32.Parse(textBox1.Text));

    SalesOrderHeader header =
    objCtx.SalesOrderHeader.Where(
           "it.SalesOrderID == @p", parameter).FirstOrDefault();

    // Refresh the SalesOrderHeader in the grid.
    objCtx.Refresh(RefreshMode.StoreWins, header);

이 항목의 코드 시나리오는 AdventureWorks 데이터 바인딩 샘플 응용 프로그램에 사용된 Entity Framework 데이터 바인딩의 주요 기능입니다. 전체 코드는 AdventureWorks 데이터 바인딩 샘플 응용 프로그램 코드(EDM 샘플 응용 프로그램)AdventureWorks 데이터 바인딩 샘플 SalesOrderDetail 추가 폼(EDM 샘플 응용 프로그램)에 포함되어 있습니다.

참고 항목

개념

AdventureWorks Sales 모델(EDM)
AdventureWorks 데이터 바인딩 샘플 응용 프로그램 코드(EDM 샘플 응용 프로그램)
AdventureWorks 데이터 바인딩 샘플 SalesOrderDetail 추가 폼(EDM 샘플 응용 프로그램)