개발 이야기/ORM2012. 4. 15. 12:30

Entity Framework - Entity Stored Procedure 활용(1)

앞 세션에서 Entity Framework의 Entity CRUD 작업에 대해서 알아보았습니다앞 세션에서 엔티티 작업은 실제로 Ad-Hoc Query를 사용합니다이번에는 Stored Procedure를 사용하여 데이터 작업하는 것을 확인해보겠습니다.

 

기본 Stored Procedure 생성

이번 내용을 확인해보기 위해 필요한 프로시져 스크립트입니다Northwind 데이터베이스에 생성해주세요~

USE Northwind

 

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Description:     신규생성

-- =============================================

CREATE PROCEDURE Shippers_INSERT

       @CompanyName nvarchar(40),

       @Phone nvarchar(24)

AS

BEGIN

       SET NOCOUNT ON;

      

       INSERT INTO [Northwind].[dbo].[Shippers]

           ([CompanyName],[Phone])

     VALUES

           (@CompanyName, @Phone)

 

END

GO

 

 

-- =============================================

-- Description:     수정

-- =============================================

CREATE PROCEDURE Shippers_UPDATE

       @ShipperID INT,

       @CompanyName nvarchar(40),

       @Phone nvarchar(24)

AS

BEGIN

       SET NOCOUNT ON;

      

       UPDATE [Northwind].[dbo].[Shippers]

       SET [CompanyName] = @CompanyName, [Phone] = @Phone

       WHERE ShipperID = @ShipperID

      

END

GO

 

 

-- =============================================

-- Description:     삭제

-- =============================================

CREATE PROCEDURE Shippers_DELETE

       @ShipperID INT

AS

BEGIN

       SET NOCOUNT ON;

      

       DELETE FROM [Northwind].[dbo].[Shippers]

       WHERE ShipperID = @ShipperID

      

END

GO

 

 

 

Stored Procedure Entity 업데이트

EDM 프로시져를 가져오겠습니다. “update Model from Database…”메뉴를 클릭해주세요.

07_01.jpg

[그림 7-1] 모델 업데이트

 

앞에서 생성한 프로시져를 선택해주세요.

07_02.jpg

[그림 7-2] Stored Procedure 추가

 

프로시져를 가져왔다면 엔티티 매핑 작업을 진행해주세요. EDM에서 매핑 상세에서 “Shippers” 엔티티의 프로시져 항목을 클릭하면 다음과 같은 화면이 나옵니다. Insert, Update, Delete에 맞는 프로시져를 맞춰서 설정해주면 자동으로 매핑이 됩니다.

 07_03.jpg

[그림 7-3] 엔티티 매핑

 

믿기지않겠지만,,, 다 끝났습니다.^^

 

Entity 생성(Insert)

소스 코드를 보면 아시겠지만 앞 세션에서 다룬 엔티티 생성 코드와 동일합니다.

 

        private void btnInsert_Click(object sender, EventArgs e)

        {

            using (var context = new NorthwindEntities())

            {

                Shippers shipper = new Shippers();

                shipper.CompanyName = "test 11";

                shipper.Phone = "(02)123-1234";

                context.Shippers.AddObject(shipper);

                context.SaveChanges();

                MessageBox.Show("record inserted");

            }

        }

   

 

SQL Profiler에서 확인하면 Shippers_INSERT” 프로시져가 호출되어 데이터가 추가된 것을 확인 할 수 있습니다.

07_04.jpg

[그림 7-4] SQL Profiler 데이터 추가


Entity 수정(Update)

엔티티 데이터 수정도 마찬가지입니다특정 항목에 대해서 데이터를 수정하고 SaveChange메서드를 호출하여 최종적으로 데이터베이스에 반영하는 액션을 취합니다.

 

        private void btnUpdate_Click(object sender, EventArgs e)

        {

            using (var context = new NorthwindEntities())

            { 

                var per = context.Shippers.Where(p => p.ShipperID == 7).First();

                per.CompanyName = "JYP Company 77";

                per.Phone = "(02)123-1234";

                context.SaveChanges();

                MessageBox.Show("record updated");

            }

        }

   

 

SQL Profiler에서 확인해보죠. “Shippers_UPDATE” 프로시져가 호출되고 있네요.

07_05.jpg

[그림 7-5] SQL Profiler 데이터 수정

 

Entity 삭제(Delete)

데이터 삭제하는 부분도 확인해보겠습니다.

 

        private void btnDelete_Click(object sender, EventArgs e)

        {

            using (var context = new NorthwindEntities())

            {

                var shipper = context.Shippers.Where(p => p.ShipperID == 9).First();

                context.DeleteObject(shipper);

                context.SaveChanges();

 

                MessageBox.Show("record deleted");

            }

        }

   

 

역시 Shippers_DELETE” 프로시져가 호출되고 있습니다.^^

07_06.jpg

[그림 7-6] SQL Profiler 데이터 삭제

 

이번에 알아본것은 간단히 요약하자만 특정 엔티티 기준에서 데이터 작업을 할 경우 Stored Procedure를 사용하는 것을 확인해봤습니다현업에서는 Stored Procedure를 활용을 많이 하기때문에 알아두시면 유용하게 사용될거라 생각됩니다 ㅋㅋ 이번 세션은 여기까지읽어주셔서 감사합니다. (_._)꾸벅

소스 코드 : EF4.07.zip

 

sqler에 아티클 작성 했던것을 공유합니다.

출처 : http://www.sqler.com/400553


Posted by 사나에