매핑된 저장 프로시저에 대한 응용 프로그램 코드(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)