Share via


저장소 명령 직접 실행

Entity Framework 를 사용하면 임의의 데이터 소스 명령을 직접 실행할 수 있습니다.

현재 트랜잭션의 컨텍스트가 있는 경우 저장소 명령은 해당 컨텍스트에서 실행됩니다. 다음 메서드 중 하나를 호출하기 전에 ObjectContext를 통한 연결이 열려 있지 않으면 Entity Framework 에서는 쿼리를 실행하기 전에 연결을 연 다음 쿼리 실행이 완료된 후 해당 연결을 닫습니다. 쿼리 실행에 대한 자세한 내용은 개체 쿼리(Entity Framework)를 참조하십시오. 다음 메서드는 ObjectContext 형식에 속합니다. 이러한 메서드를 사용하는 방법에 대한 예제는 방법: 데이터 소스에 대해 명령 직접 실행을 참조하십시오. 해당하는 메서드는 다음과 같습니다.

결과 형식 구체화

제네릭 결과 형식 매개 변수를 사용하는 이전 메서드의 경우, TResult는 기본 형식, 엔터티 형식 또는 사용자 지정 형식일 수 있습니다. Entity Framework 개념적 모델에서는 형식을 정의할 필요가 없습니다. 지정된 형식이 개념적 모델에 정의되지 않은 형식이거나 기본 형식이면 다음 매핑 규칙이 적용됩니다.

형식

  • 추상이 아니어야 합니다.

  • 기본 생성자가 있어야 합니다.

형식의 각 속성 값

  • setter가 있어야 합니다.

  • CSDL의 기본 형식과 일치해야 합니다.

  • 결과 DbDataReader의 열 이름과 일치해야 합니다. 공급자 구현에서는 열 이름이 속성 이름과 동일한지 여부를 확인합니다. 형식의 속성 이름이 DbDataReader의 필드와 일치하지 않으면 Entity Framework 에서는 개념적 모델에 정의된 속성의 기본값을 구체화합니다.

매개 변수가 있는 명령 사용

매개 변수가 있는 명령을 사용하면 SQL 문에 명령을 삽입하여 서버의 보안을 손상시키는 공격인 SQL 삽입 공격으로부터 보호할 수 있습니다. 매개 변수가 있는 명령에서는 외부 소스에서 가져온 값이 SQL 문의 일부가 아니라 값으로만 전달되도록 하여 SQL 삽입 공격으로부터 보호합니다. 따라서 값에 삽입된 SQL명령이 데이터 소스에서 실행되지 않으며 매개 변수 값으로만 평가됩니다. 매개 변수가 있는 명령은 이러한 보안상의 장점뿐만 아니라 SQL문과 함께 전달되거나 저장 프로시저에 전달되는 값을 구성할 수 있는 편리한 방법을 제공합니다.

ExecuteStoreCommand 메서드나 ExecuteQuery 오버로드(ExecuteStoreQuery 또는 ExecuteStoreQuery) 중 하나를 호출하고 commandTextparameters 인수를 전달하면 Entity Framework 에서는 현재 개체 컨텍스트 연결을 사용하여 새 DbCommand 인스턴스를 생성하고 CommandText ** 속성을 commandText로, Parameters 속성을 parameters로 설정합니다. parameters 값은 DbParameter 개체의 배열이거나 매개 변수 값의 배열일 수 있습니다. 값만 제공하면 배열의 값 순서에 따라 DbParameter 개체의 배열이 만들어집니다. 기본 공급자는 CLR(공용 언어 런타임) 형식에 따라 매개 변수 개체에 적절한 DbType을 결정합니다. 각 매개 변수 개체의 ParameterName은 "pn" 패턴을 사용하여 만들어집니다. 여기서 n은 매개 변수 인수의 서수(0부터 시작)입니다.

예를 들어 다음의 두 메서드 호출은 동일합니다.

context.ExecuteStoreQuery<Product>("select * from Products where pid = {0}", 1);

context.ExecuteStoreQuery<Product>("select * from Products where pid = @p0", new SqlParameter { ParameterName = "p0", Value = 1 });

참고 항목

작업

방법: 데이터 소스에 대해 명령 직접 실행