저장 프로 시저를 사용하는 방법 중 하나이며 수년 동안 널리 사용되었습니다.
C # (또는 .NET 언어)에서 SQL Server 데이터베이스와 상호 작용하는보다 현대적인 방법은 Entity Framework를 사용하는 것입니다. Entity Framework의 장점은 더 높은 수준의 추상화를 제공한다는 것입니다.
Microsoft에서 인용하려면 ( https://msdn.microsoft.com/en-us/data/jj590134 ) :
개발자는 ADO.NET Entity Framework를 사용하여 관계형 저장소 스키마를 직접 프로그래밍하는 대신 개념적 응용 프로그램 모델을 프로그래밍하여 데이터 액세스 응용 프로그램을 만들 수 있습니다. 데이터 지향 응용 프로그램에 필요한 코드 및 유지 관리 비용을 줄이는 것이 목표입니다. Entity Framework 응용 프로그램은 다음과 같은 이점을 제공합니다.
- 응용 프로그램은 상속, 복잡한 멤버 및 관계가있는 유형을 포함하여보다 응용 프로그램 중심의 개념적 모델 측면에서 작동 할 수 있습니다.
- 응용 프로그램은 특정 데이터 엔진 또는 스토리지 스키마에 대한 하드 코딩 된 종속성이 없습니다.
- 개념적 모델과 저장소 별 스키마 간의 매핑은 응용 프로그램 코드를 변경하지 않고도 변경할 수 있습니다.
- 개발자는 다양한 데이터베이스 관리 시스템에서 구현 될 수있는 다양한 저장소 스키마에 매핑 될 수있는 일관된 응용 프로그램 개체 모델을 사용할 수 있습니다.
- 여러 개념적 모델을 단일 스토리지 스키마에 매핑 할 수 있습니다.
- LINQ (언어 통합 쿼리) 지원은 개념적 모델에 대한 쿼리에 대한 컴파일 타임 구문 유효성 검사를 제공합니다.
ORM과 저장 프로 시저 (Stored Procedures)의 사용은 특히 보안 측면과 논리가 존재하는 위치에서 트레이드 오프를 수반합니다.
SQL Server를 사용한 개발에 대한 "전통적인"접근 방식은 응용 프로그램 논리가 저장 프로 시저와 테이블에 직접 업데이트되지 않고 저장 프로 시저를 실행할 수있는 보안 권한 만있는 프로그램에만 상주하는 것입니다. 여기서 개념은 저장 프로 시저가 응용 프로그램의 비즈니스 논리 계층이라는 것입니다. 이론은 건전하지만 C #이나 VB와 같은 프로그래밍 언어로 비즈니스 로직을 구현하는 것으로 대체되면서 여러 가지 이유로 유리하지 않은 경향이 있습니다. 좋은 응용 프로그램은 우려 분리 등을 포함하여 계층 적 접근 방식으로 여전히 구현되지만 MVC와 같은 패턴을 따르는 경향이 있습니다.
데이터베이스가 아닌 ORM에서 로직을 구현할 때의 단점은 데이터베이스 (DA 또는 DBA)를 담당하는 사람들이 데이터 무결성 규칙을 쉽게 디버깅하고 테스트 할 수 있다는 것입니다. 당신의 당좌 예금에서 저축 예금 계좌로 돈을 이체하는 전형적인 예를 들어 보자. 이것은 원자 단위의 작업 단위로, 즉 거래에 끼워진 것이 중요합니다. 이러한 종류의 전송이 저장 프로 시저를 통해서만 수행 될 수있는 경우, DA와 감사자가 저장 프로 시저를 QA하는 것이 비교적 쉽습니다.
반면에 Entity Framework와 같은 ORM을 통해이 작업을 수행하고 프로덕션 환경에서 드물게는 검사에서 돈을 받지만 저축에 들어 가지 않는 경우는 더욱 복잡 할 수 있습니다. 특히 여러 프로그램이 잠재적으로 관련되어있는 경우 더욱 그렇습니다. 이것은 아마도 특정 순서 등에서 발생해야하는 독특한 하드웨어 문제와 관련하여 가장 중요한 경우 일 것입니다. 어떻게 이것을 테스트합니까?