Entity Framework 저장 프로시저 테이블 반환 매개변수
Entity Framework 자체는 테이블 반환 매개변수를 저장 프로시저에 전달하는 것을 직접 지원하지 않습니다. 그러나 ObjectContext
의 ExecuteStoreQuery
메서드를 사용하여 해결 방법을 구현할 수 있습니다.
위 코드에는 저장소에 공통 ExecuteStoredProcedure
메소드가 있습니다:
<code class="language-csharp">public IEnumerable<T> ExecuteStoredProcedure<T>(string procedureName, params object[] parameters) { StringBuilder command = new StringBuilder(); command.Append("EXEC "); command.Append(procedureName); command.Append(" "); // 为每个传入的参数添加占位符 for (int i = 0; i < parameters.Length; i++) { if (i > 0) command.Append(","); command.Append("{" + i + "}"); } return this.context.ExecuteStoreQuery<T>(command.ToString(), parameters); }</code>
이 방법을 사용하여 테이블 반환 매개변수를 전달할 때 "테이블 유형 매개변수 p6에는 유효한 유형 이름이 있어야 합니다"와 같은 오류가 발생할 수 있습니다. 이 문제를 해결하려면 SqlDbType
을 Structured
으로 지정하고 SqlParameter.TypeName
를 데이터베이스의 사용자 정의 유형(UDT) 이름으로 설정해야 합니다.
그러나 이러한 수정에도 불구하고 잘못된 구문과 관련된 오류가 계속 발생할 수 있습니다.
사용자 정의 확장 방법
ObjectContext
클래스의 사용자 정의 확장 메서드를 사용하면 이 프로세스를 단순화할 수 있습니다.
<code class="language-csharp">public static void ExecuteStoredProcedure(this ObjectContext context, string storedProcName, params object[] parameters) { string command = "EXEC " + storedProcName + " @caseid, @userid, @warnings"; context.ExecuteStoreCommand(command, parameters); }</code>
이 확장 메서드를 사용하면 테이블 반환 매개변수를 사용하여 직접 저장 프로시저를 호출할 수 있습니다. 사용 예는 다음과 같습니다.
<code class="language-csharp">var entities = new NewBusinessEntities(); var dt = new DataTable(); dt.Columns.Add("WarningCode"); dt.Columns.Add("StatusID"); dt.Columns.Add("DecisionID"); dt.Columns.Add("Criticality"); dt.Rows.Add("EO01", 9, 4, 0); dt.Rows.Add("EO00", 9, 4, 0); dt.Rows.Add("EO02", 9, 4, 0); var caseId = new SqlParameter("caseid", SqlDbType.Int); caseId.Value = 1; var userId = new SqlParameter("userid", SqlDbType.UniqueIdentifier); userId.Value = Guid.Parse("846454D9-DE72-4EF4-ABE2-16EC3710EA0F"); var warnings = new SqlParameter("warnings", SqlDbType.Structured); warnings.Value = dt; warnings.TypeName = "dbo.udt_Warnings"; entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);</code>
제한사항
이 확장 방법이나 유사한 사용자 지정 방법을 사용할 때는 다음 제한 사항을 고려하세요.
위 내용은 Entity Framework의 저장 프로시저에 테이블 반환 매개 변수를 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!