Entity Framework-저장 프로 시저

Entity Framework를 사용하면 자동 명령 생성 대신 또는 이와 함께 엔터티 데이터 모델의 저장 프로 시저를 사용할 수 있습니다.

  • 저장 프로 시저를 사용하여 데이터베이스 테이블에서 미리 정의 된 논리를 수행 할 수 있으며 많은 조직에는 이러한 저장 프로 시저를 사용해야하는 정책이 있습니다.

  • 또한 EF가 엔터티를 삽입, 업데이트 또는 삭제하는 데 저장 프로 시저를 사용하도록 지정할 수도 있습니다.

  • 동적으로 빌드 된 명령은 안전하고 효율적이며 일반적으로 사용자가 직접 작성하는 것만큼이나 우수하지만 저장 프로 시저가 이미 존재하고 회사 관행이 테이블의 직접 사용을 제한 할 수있는 경우가 많습니다.

  • 또는 저장소에서 실행되는 항목을 명시 적으로 제어하고 저장 프로 시저를 만드는 것을 선호 할 수도 있습니다.

다음 예제는 파일 → 새로 만들기 → 프로젝트에서 새 프로젝트를 만듭니다.

Step 1 − 중간 창에서 콘솔 애플리케이션을 선택하고 이름 필드에 StoredProceduresDemo를 입력합니다.

Step 2 − 서버 탐색기에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭합니다.

Step 3 − 새 쿼리를 선택하고 T-SQL 편집기에 다음 코드를 입력하여 데이터베이스에 새 테이블을 추가합니다.

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = 
   OBJECT_ID(N'[dbo].[StudentGrade]') AND type in (N'U'))

BEGIN

   CREATE TABLE [dbo].[StudentGrade](

      [EnrollmentID] [int] IDENTITY(1,1) NOT NULL,
      [CourseID] [int] NOT NULL,
      [StudentID] [int] NOT NULL,
      [Grade] [decimal](3, 2) NULL,

      CONSTRAINT [PK_StudentGrade] PRIMARY KEY CLUSTERED (
         [EnrollmentID] ASC
      )

      WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

   ) ON [PRIMARY]

END
GO

Step 4 − 편집기를 마우스 오른쪽 버튼으로 클릭하고 실행을 선택합니다.

Step 5− 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 새로 고침을 클릭합니다. 데이터베이스에 새로 추가 된 테이블이 표시됩니다.

Step 6 − 서버 탐색기에서 데이터베이스를 다시 마우스 오른쪽 버튼으로 클릭합니다.

Step 7 − New Query를 선택하고 T-SQL 편집기에 다음 코드를 입력하여 데이터베이스에 저장 프로 시저를 추가하면 학생 성적이 반환됩니다.

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = 
   OBJECT_ID(N'[dbo].[GetStudentGrades]') AND type in (N'P', N'PC'))

BEGIN

   EXEC dbo.sp_executesql @statement = N'
   CREATE PROCEDURE [dbo].[GetStudentGrades]
   @StudentID int
   AS
   SELECT EnrollmentID, Grade, CourseID, StudentID FROM dbo.StudentGrade 
   WHERE StudentID = @StudentID
   '
END
GO

Step 8 − 편집기를 마우스 오른쪽 버튼으로 클릭하고 실행을 선택합니다.

Step 9− 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 새로 고침을 클릭합니다. 데이터베이스에 저장 프로 시저가 생성 된 것을 볼 수 있습니다.

Step 10 − 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 추가 → 새 항목을 선택합니다.

Step 11 − 그런 다음 템플릿 창에서 ADO.NET 엔티티 데이터 모델을 선택합니다.

Step 12 − 이름으로 SPModel을 입력하고 추가를 클릭합니다.

Step 13 − 모델 콘텐츠 선택 대화 상자에서 데이터베이스에서 EF 디자이너를 선택하고 다음을 클릭합니다.

Step 14 − 데이터베이스를 선택하고 다음을 클릭합니다.

Step 15 − 데이터베이스 개체 선택 대화 상자에서 테이블,보기를 클릭합니다.

Step 16 − Stored Procedures and Functions 노드 아래에있는 GetStudentGradesForCourse 함수를 선택하고 Finish를 클릭합니다.

Step 17 −보기 → 다른 창 → 엔터티 데이터 모델 브라우저를 선택하고 함수 가져 오기에서 GetStudentGrades를 마우스 오른쪽 버튼으로 클릭하고 편집을 선택합니다.

다음 대화 상자가 생성됩니다.

Step 18 − Entities 라디오 버튼을 클릭하고이 저장 프로 시저의 반환 유형으로 콤보 상자에서 StudentGrade를 선택하고 Ok를 클릭합니다.

GetStudentGrades 저장 프로 시저에서 매개 변수로 학생 ID를 전달하여 모든 성적을 검색하는 다음 C # 코드를 살펴 보겠습니다.

class Program {

   static void Main(string[] args) {

      using (var context = new UniContextEntities()) {

         int studentID = 22;
         var studentGrades = context.GetStudentGrades(studentID);

         foreach (var student in studentGrades) {
            Console.WriteLine("Course ID: {0}, Title: {1}, Grade: {2} ", 
               student.CourseID, student.Course.Title, student.Grade);
         }

         Console.ReadKey();

      }
   }
}

위의 코드가 컴파일되고 실행되면 다음과 같은 출력을 받게됩니다.

Course ID: 4022, Title: Microeconomics, Grade: 3.00
Course ID: 4041, Title: Macroeconomics, Grade: 3.50

더 나은 이해를 위해 위의 예를 단계별로 실행하는 것이 좋습니다.