development

엔티티 프레임 워크 3.5에서 저장 프로 시저 새로 고침

big-blog 2021. 1. 9. 11:27
반응형

엔티티 프레임 워크 3.5에서 저장 프로 시저 새로 고침


엔티티 프레임 워크와 함께 .NET 3.5 SP1, VS 2008을 사용하고 있습니다. 원래 모델에 2 개의 매개 변수를 사용하는 저장 프로 시저를 추가했습니다. 나중에 sproc을 1 개의 매개 변수 만 취하도록 변경했습니다. Update Model From Database메뉴 옵션을 실행하고 내 sproc이 Refresh에 나열되어 있는지 확인했습니다 . 마법사를 완료하고 솔루션을 정리하고 다시 빌드했으며 모델은 sproc의 서명을 변경하지 않았습니다.

왜 업데이트되지 않습니까? 데이터베이스에서 모델 업데이트 기능이 손상 되었습니까? 내가 뭔가를 놓치고 있습니까? 감사.


엔터티 프레임 워크에 추가 한 후 저장 프로 시저를 업데이트하는 데 두 가지 문제가 있습니다.

  • SPROC를 호출하기 위해 생성 된 함수 가져 오기가 업데이트되지 않았습니다 (잘못된, 오래된 매개 변수).
  • SPROC의 결과 집합에 대해 생성 된 복합 유형이 업데이트되지 않았습니다 (잘못된, 오래된 필드).

EDMX 모델 업데이트 (함수 가져 오기)

  1. .edmx 파일을 엽니 다 (GUI 디자이너에서).
  2. 열린 공간을 마우스 오른쪽 버튼으로 클릭하고 "데이터베이스에서 모델 업데이트"를 선택합니다.
  3. 팝업 창에서 마침 (가능한 경우)을 클릭합니다. SPROC의 서명을 업데이트해야합니다 (함수 가져 오기와 함께).

저장 프로 시저 복합 유형 업데이트

  1. .edmx가 열려있는 동안 " 모델 브라우저 "창을 엽니 다.

  2. ContentModel , EntityContainer : ...를 확장 한 다음 Function Imports 노드를 확장합니다 . 저장 프로 시저에 대한 함수 가져 오기를 찾아 두 번 클릭 하십시오. 만들 때 사용한 것과 동일한 창이 열리지 만 이제 데이터로 채워집니다.

  3. 클릭 가져 오기 열 정보 (변경됩니다 알기 위해 버튼을 아래의 표에서 보면) 버튼을 누릅니다.

  4. "복합"라디오 버튼 선택 옆에 있는 업데이트 버튼을 클릭합니다 .

  5. 확인을 클릭하면 결과 집합의 복합 유형이 업데이트됩니다.


edmx / xml을 편집 할 필요가 없습니다. 이 작업을 수행:

저장 프로 시저를 EDMX로 가져 오면 (결과 집합을 반환하는 프로세스에 대해 이야기하고 있지만 비슷한 프로세스가 될 것입니다) 1이 아닌 3 개 항목이 생성되고 이것이 문제의 원인입니다. (*** 문제의 두 번째 원인은 객체를 삭제 한 후 객체를 다시 가져 오기 전에 명시 적으로 저장해야한다는 것입니다. 그렇지 않으면 새로 다시 가져온 객체가 edmx에서 실제로 삭제되지 않은 객체 (저장하여)와 충돌합니다.

그래서! 이 작업을 수행:

일반적으로 왼쪽에있는 모델 브라우저에서 저장 프로 시저의 이름을 검색 상자에 붙여넣고 입력 (또는 검색)을 클릭합니다. 첫 번째 인스턴스 (아마도 저장 프로 시저 자체)에 도달합니다. 마우스 오른쪽 버튼을 클릭하고 삭제합니다. 이제 커서를 검색 상자에 다시 넣습니다-> Enter 키를 누르거나 다시 검색하십시오. 이제 함수 가져 오기를 시작합니다. 마우스 오른쪽 버튼을 클릭하고 삭제합니다. 세 번째로 동일한 작업을 수행합니다. 결과 집합을 나타내는 복합 유형에 도달합니다. 그것을 삭제하십시오. 이제 완료되지 않았습니다 !!!!!. 방금 한 작업을 저장해야 삭제 내용이 edmx에 기록됩니다 (기록되지 않음).

이제 저장 프로 시저를 다시 가져 오십시오 (업데이트 된 모델 / 저장된 프로 시저 선택). 이제 다시 저장을 클릭하십시오.

그것은 매번 작동합니다. 핵심은 모델 브라우저를 사용하여 모델 브라우저에 표시되는 저장 프로 시저 이름의 모든 인스턴스를 검색 할 때 확인하는 것이므로 기본 명명 규칙을 사용하지 않는 것이 좋습니다. 두 번째 핵심은 단계를 완료 한 후 저장하는 것입니다.


stor proc add set fmtonly off 에서 결과 집합-> 열의 데이터 유형을 변경해야하는 경우

그런 다음 Model Browser-> Function Import-> Edit Your Proc-> Get Column Information 버튼-> Update 버튼을 사용하십시오.

이것이 Neil이하는 방법입니다. :)


XML을 수동으로 편집하고 Visual Studio를 몇 번 다시 시작해야했지만 마침내 VS가 이전 서명을 잊어 버릴 수있었습니다. 그런 다음 일반 EF 마법사를 사용하여 다시 추가했는데 제대로 작동했습니다.


저장된 proc의 서명을 변경하는 경우 함수 가져 오기를 통해 모델에서 생성 된 복합 유형을 업데이트해야합니다.


엔터티 프레임 워크가 프로 시저에 대한 새 정의를 생성해야하므로 저장 프로 시저를 삭제하고 다시 추가해야합니다. 함수 가져 오기를 다시 실행해야한다고 생각합니다.

기본적으로 반환 유형이나 서명이 아닌 프로 시저의 논리를 변경 한 경우 다시 추가 할 필요가 없습니다. 잘 작동하지만 반환 유형 또는 서명을 변경하면 ef가 생성하고 작동하는 방식의 새 정의에 매핑해야합니다.


Had a similar problem in EF4 where there is no option to refresh individual sps, it's meant to do it when you click refresh in the update wizard but it doesn't work reliably. I had to in the model browser delete the complex types for the return values, and also the function import. Then go into the edmx file with the XML editor and remove the reference to the stored proc (couldn't find a way of doing this in the model browser). Then re-add the sps.


You can also erase all evidence of the SP in the following places, theses files can be found in the Model Browser when you open the .edmx file:

  • YourModel > Complex Types;
  • YourModel > Function Imports;
  • YourModel.Store > Stored Procedures / Functions.

After delete it you can add it back with no problems.

ReferenceURL : https://stackoverflow.com/questions/4995226/refreshing-a-stored-procedure-in-entity-framework-3-5

반응형