다음을 통해 공유


매핑된 저장 프로시저에 대한 응용 프로그램 코드(Entity Framework)

이 단원에 나온 응용 프로그램 코드는 Entity Framework에서 데이터를 업데이트하는 저장 프로시저가 사용되는 방법을 보여 줍니다. 예제에서 사용된 개체 모델 및 저장 프로시저는 저장 프로시저 지원(Entity Framework)에서 설명합니다.

저장소 스키마에서 저장 프로시저를 정의하고 매핑 사양에서 매핑하면 해당 저장 프로시저는 암시적으로 호출됩니다. 데이터 모델에서 저장 프로시저를 사용하는지 여부와 관계없이 엔터티 만들기, 업데이트 및 삭제에 사용되는 코드 시퀀스는 동일합니다.

저장 프로시저를 사용하여 엔터티 만들기

다음 예제에서는 새 SalesOrderDetail 엔터티를 만들어 저장소에 넣습니다.

    SalesOrderDetail newSODetail = new SalesOrderDetail();

    newSODetail.CarrierTrackingNumber = "4E0A-4F89-AE";
    newSODetail.ModifiedDate = DateTime.Now;
    newSODetail.SpecialOfferID = 1;
    newSODetail.rowguid = Guid.NewGuid(); 
    newSODetail.UnitPrice = 45.00M;
    newSODetail.OrderQty = 5;
    newSODetail.ProductID = 680;

    objCtx.AddToSalesOrderDetails(newSODetail);
    ObjectParameter par = new ObjectParameter("p", 45678);
    SalesOrderHeader soHeader = 
                  objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p", par).First<SalesOrderHeader>();
    soHeader.SalesOrderDetail.Add(newSODetail);
    objCtx.SaveChanges();

저장 프로시저를 사용하여 엔터티 수정

다음 코드는 SalesOrderDetail 엔터티의 주문 수량 속성을 수정합니다.

    ObjectParameter par2 = new ObjectParameter("p", 45678);
     SalesOrderHeader soHeader2 = 
                      objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p", par2).First<SalesOrderHeader>();
     soHeader2.SalesOrderDetail.Load();
     foreach (SalesOrderDetail sodet in soHeader2.SalesOrderDetail)
     {
            Console.WriteLine(sodet.SalesOrderDetailID + " Prod: " +
            sodet.ProductID + " Qty: " + sodet.OrderQty);
            if (sodet.ProductID.Equals(680))
            {
                  sodet.OrderQty = 6;
                  objCtx.SaveChanges();
                  break; 
            }
      }

저장 프로시저를 사용하여 엔터티 삭제

다음 코드는 저장 프로시저를 사용하여 SalesOrderDetail 엔터티를 삭제합니다.

    ObjectParameter par2 = new ObjectParameter("p", 45678);
    SalesOrderHeader soHeader2 = 
    objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p",
                                      par2).First<SalesOrderHeader>();
    soHeader2.SalesOrderDetail.Load();
    foreach (SalesOrderDetail sodet in soHeader2.SalesOrderDetail)
    {
                Console.WriteLine(sodet.SalesOrderDetailID + 
                  " Prod: " + sodet.ProductID + " Qty: " +
                  sodet.OrderQty);
            if (sodet.ProductID.Equals(680))
            {
                  objCtx.DeleteObject(sodet);
                  objCtx.SaveChanges();
                  break; 
            }

    }

전체 응용 프로그램 코드

이 단원의 모든 예제는 다음 예제에 포함되어 있습니다. 한 번 실행된 후 새 SalesOrderDetail 엔터티를 만드는 코드 블록을 주석 처리합니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AdventureWorksModel;
using System.Data.Objects;

namespace AdvWksSalesSProcsClient
{
    class Program
    {
        static void Main(string[] args)
        {
            using (AdventureWorksEntities objCtx = new AdventureWorksEntities())
            {
                SalesOrderDetail newSODetail = new SalesOrderDetail();

                newSODetail.CarrierTrackingNumber = "4E0A-4F89-AE";
                newSODetail.ModifiedDate = DateTime.Now;
                newSODetail.SpecialOfferID = 1;
                newSODetail.rowguid = Guid.NewGuid(); 
                newSODetail.UnitPrice = 45.00M;
                newSODetail.OrderQty = 5;
                newSODetail.ProductID = 680;

                objCtx.AddToSalesOrderDetails(newSODetail);
                
                ObjectParameter par = new ObjectParameter("p", 45678);
                SalesOrderHeader soHeader = 
                      objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p",
                                                     par).First<SalesOrderHeader>();

                soHeader.SalesOrderDetail.Add(newSODetail);
                objCtx.SaveChanges();

                ObjectParameter par2 = new ObjectParameter("p", 45678);
                SalesOrderHeader soHeader2 = 
                      objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p",
                                                      par2).First<SalesOrderHeader>();
                soHeader2.SalesOrderDetail.Load();
                foreach (SalesOrderDetail sodet in soHeader2.SalesOrderDetail)
                {
                    Console.WriteLine(sodet.SalesOrderDetailID + 
                              " Prod: " + sodet.ProductID + " Qty: " + sodet.OrderQty);
                    if (sodet.ProductID.Equals(680))
                    {
                        objCtx.DeleteObject(sodet);
                        objCtx.SaveChanges();
                        break; 
                        
                    }

                }

                foreach (SalesOrderDetail sodet in soHeader2.SalesOrderDetail)
                {
                    Console.WriteLine(sodet.SalesOrderDetailID + 
                       " Prod: " + sodet.ProductID + 
                       " Qty: " + sodet.OrderQty);
                    if (sodet.ProductID.Equals(680))
                    {
                        sodet.OrderQty = 6;
                        objCtx.SaveChanges();
                        break;
                    }

                }

            }
        }
    }
}

참고 항목

작업

방법: 저장 프로시저를 사용하여 쿼리 실행(Entity Framework)
방법: 저장 프로시저로 모델 정의(Entity Framework)

개념

저장 프로시저 지원(Entity Framework)
AdventureWorks Sales 모델(EDM)
연결 집합을 저장 프로시저에 매핑(Entity Framework)
ModificationFunctionMapping(EntityTypeMapping)
ModificationFunctionMapping(AssociationSetMapping)