엔티티 프레임워크에서 저장 프로시저를 호출하는 중 오류 발생
엔티티 프레임워크에서 스토어 프로시저에 액세스하려고 합니다.
다음 단계를 수행했습니다.
먼저 Azure 데이터베이스에 저장 프로시저를 만들었습니다.
그런 다음 데이터베이스에서 .edmx 모델을 업데이트하여 원하는 저장 프로시저만 선택했습니다.
완료되면 기능 가져오기에서 추가된 저장 프로시저가 표시되지만 저장 프로시저 섹션에는 표시되지 않습니다.여기에 표시하려면 어떻게 해야 합니까?
Function Import 섹션에서는 모든 파라미터가 Input으로 설정되고 "Max Reference"는 Output으로 표시되어야 합니다.어떻게 바꿀 수 있습니까?
이 두 가지 문제가 있지만 코드를 실행했습니다.
저는 다음과 같은 예외를 얻었습니다.
EntityCommandCompilationException
An error occurred while preparing command definition. See the inner exception for details.
및 내부 예외:
The function import 'DataModelEntities.AssignMaxSalesRef' cannot be executed because it is not assigned to a storage function.
다음 블로그 게시물을 참조하십시오.FunctionImport가 유사한 문제를 논의하는 스토어 함수 Error에 매핑되지 않았습니다.원인은 다음과 같습니다.
저장 프로시저를 변경해야 하는데 Entity Data Model Xml 파일(*.edmx)에서 삭제되었습니다.
다음과 같은 단계별 솔루션을 사용합니다.
그 오류를 해결할 수 있는 쉬운 해결책이 있습니다.먼저 edmx 파일을 열고 저장 프로시저를 소유한 모델을 마우스 오른쪽 버튼으로 클릭합니다.[추가]를 누른 후 "기능 가져오기 추가"를 선택합니다.
컨텍스트 파일에 사용된 것과 동일한 Function Import 이름을 추가합니다(나와 같이 메소드가 이미 생성되었지만 엉망인 경우, 그렇지 않으면 모두 새 것이므로 다시 생성됩니다).수정하려는 저장 프로시저 이름을 선택합니다.엔티티를 선택하고 확인을 클릭합니다.새 창이 "FunctionImport name is unique"(FunctionImport name is unique)
그런 경우 "FunctionImport name is unique" 창이 나타나면 다음을 수행합니다.*.edmx 파일을 열고 업데이트할 모델을 마우스 오른쪽 단추로 클릭합니다.모델 브라우저에 표시를 선택합니다.이제 Model Browser(모델 브라우저) 창이 열립니다.{myProject}(으)로 이동합니다.데이터 모델 > 엔티티 컨테이너: {somethingEntities} > 함수 가져오기.문제의 원인이 되는 함수 가져오기가 있어야 합니다. 삭제하고 *.edmx 파일을 저장하기만 하면 됩니다.
함수 가져오기를 다시 추가합니다.Voila! 이번에는 문제 없습니다.*.edmx 파일을 저장하고 컨텍스트 파일을 다시 만듭니다({myProject}에 공백을 추가하는 것과 같은 간단한 비침습적 변경).Context.tt 파일).새 방법을 확인합니다.
public virtual ObjectResult<MyEntity> <MyEntity>_NameoftheSP(parametets)
컨텍스트 파일에 있습니다.
edmx 파일 업데이트 시 유사한 단계별 지침(및 이미지!)이 포함된 다른 문제 해결 리소스:함수가 저장 함수에 매핑되지 않았기 때문에 함수 가져오기를 실행할 수 없습니다.
이 게시물은 댓글이어야 하는데 저는 댓글을 달 수 있는 담당자가 부족합니다.
저도 비슷한 문제를 겪고 있었습니다.저장 프로시저가 표시되었지만 오류가 발생했습니다.Alex의 이 질문과 답변을 통해 Model Browser의 Function Imports(함수 가져오기) 아래에서 각 저장 프로시저에 대한 항목이 여러 개 있음을 확인할 수 있었습니다.그들은 그것들이 진짜 중복되는 것을 막기 위해 시퀀스 번호를 가지고 있었습니다.함수 가져오기 아래의 모든 항목과 저장 프로시저/함수 아래의 모든 항목을 제거한 후 데이터베이스에서 모델을 업데이트하여 다시 추가했습니다.제 문제는 이제 해결되었습니다.
다음 오류가 발생했습니다.
The function import *XXX* cannot be executed because it is not mapped to a store function.
확인해보니 저장 프로시저가 데이터베이스에서 삭제되었습니다.저는 그것을 다시 만들었고, 그것은 오류를 고쳤습니다.
edmx 탐색기( 다이어그램 모드)를 열면 다이어그램 옆에 모델 탐색기 창이 나타납니다.
함수 가져오기 섹션에서 저장된 함수를 찾습니다.마우스 오른쪽 버튼을 클릭하면 수정할 수 있습니다.
창이 열린 다음 저장된 함수를 선택합니다. 그 다음에 함수가 매핑됩니다.
Voila, 나한테 효과가 있어요.
devArt, EF 5.0에서 오라클 db 작업.이 문제를 해결한 것은 모델에서 해당 저장 프로시저를 제거한 다음 다시 추가하는 것입니다.저장 프로시저가 DB에서 올바르게 컴파일되는지 확인하십시오. 그렇지 않으면 모델에 추가하는 옵션이 없습니다.
솔루션을 시도했지만 여전히 작동하지 않는 사용자의 경우 잘못된 열 이름 또는 기타 관련 문제로 인해 프로세스에 문제가 발생하지 않는지 확인하십시오.동일한 오류 메시지가 표시되었지만, 저의 경우에는 프로세스에서 잘못된 열 이름 참조였습니다.
동일한 문제가 여전히 발생하는 경우 모델 탐색기에서 다음 두 단계를 수행합니다.
- 모델 탭의 함수 가져오기에서 함수 삭제
- 스토어에서 프로시저 삭제
그런 다음 처음처럼 다시 추가합니다.
Following Steps Resolved it for me: Visual Studio에서 .edmx 파일 디자이너를 엽니다. 디자이너 오른쪽에서 모델 브라우저를 클릭하고 선택합니다.모델 브라우저에서 엔티티를 두 번 클릭하면 기능 가져오기 편집 마법사가 열립니다.이 마법사에서는 저장 프로시저에 해당하는 드롭다운이 올바르게 채워졌는지 확인합니다. 다시 빌드
이런 경우에 내가 보통 하는 일:메모장에서 .edmx 파일 열기++ 문제를 일으키는 저장 프로시저/뷰/테이블에 대한 참조를 제거합니다.비주얼 스튜디오(디자이너)에서 edmx를 열고 모델을 다시 업데이트합니다.저장 프로시저의 경우 메모장에서 참조를 제거한 다음 업데이트 모델 창의 비주얼 스튜디오에서 SP가 트리에 표시되고 선택할 수 있습니다.이렇게 하면 해당 SP에 대해 코드가 다시 재생성됩니다.
저장된 edmx에서 문제를 일으키는 저장 프로시저를 삭제하고 _1과 같은 유사한 이름 저장 프로시저를 postfix로 제거하기만 하면 됩니다. 이러한 모든 항목을 제거한 다음 업데이트된 저장 프로시저를 가져옵니다.
언급URL : https://stackoverflow.com/questions/30216830/error-calling-stored-procedures-from-entityframework
'programing' 카테고리의 다른 글
Windows 10 콘솔에서 인피니티가 "8"로 인쇄되는 이유는 무엇입니까? (0) | 2023.05.12 |
---|---|
Azure 함수 데이터베이스 연결 문자열 (0) | 2023.05.12 |
커밋 ID가 주어지면 현재 분기에 커밋이 포함되어 있는지 확인하는 방법은 무엇입니까? (0) | 2023.05.12 |
Visual Studio 2015 및 IFormat Provider(CA1305)의 문자열 보간 (0) | 2023.05.12 |
안드로이드 앱에 어떤 이클립스 버전을 사용해야 합니까? (0) | 2023.05.07 |