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
더 나은 이해를 위해 위의 예를 단계별로 실행하는 것이 좋습니다.