DefiningQuery가 있지만 InsertFunction 요소가 없습니다… 오류


123

이것은 나를 미치게 만들고 오류는 나에게 매우 의미가 없습니다.

EntitySet 'TableB'에 DefiningQuery가 있고 현재 작업을 지원하는 요소가 요소에 없기 때문에 업데이트 할 수 없습니다.

내 테이블은 다음과 같이 배치됩니다.

TableA
int idA (ID, 기본 키)
...

TableB
int idA (TableA.idA의 경우 FK)
int val

TableB에는 SQL 서버에 정의 된 기본 키가 없습니다. Entity Framework는 테이블과 연결을 가져오고 두 필드를 키로 설정했습니다. 그러나 테이블에 삽입을 시도하면 해당 오류가 출력됩니다!

뭐가 문제 야??


편집 : Alex가 제안한대로 해결책은 다음과 같습니다.

  1. edmx 파일을 마우스 오른쪽 버튼으로 클릭하고 다음으로 열기, XML 편집기를 선택하십시오.
  2. edmx : StorageModels 요소에서 엔티티를 찾습니다.
  3. DefiningQuery를 완전히 제거하십시오.
  4. store : Schema = "dbo"의 이름을 Schema = "dbo"로 변경합니다 (그렇지 않으면 코드에서 이름이 유효하지 않다는 오류가 생성됨).
  5. store : Name 속성 제거

두 열이 모두 키의 일부라는 것이 괜찮 았기 때문에 키를 그대로 두었습니다.


6
업데이트 해 주셔서 감사합니다. 단계별 지침은이 EF newb가 ASP.NET MVC 자습서 앱을 작동시키는 데 도움이되었습니다!
Adam Neal

이것에 대한 Thnx! EF가 기본 키가있는 SQL Server 2000 테이블에 대해 적절한 edmx 파일을 생성하지 않는다는 문제가있었습니다. 하지만이 지시는 나를 구했습니다 :)
100r

4
3.5 년이 지난 지금도이 게시물은 여전히 ​​ppl,이 경우 ME! ...받는 사람 : Palantir는 단계별 설명을 제공하고 (작동했습니다) Alex >>> Bravo에게 감사드립니다!
nanonerd 2013

이 솔루션은 .. 나를 위해 감사 일
Delavega

비밀은 스키마 정의에서 "store :"를 제거했습니다. 아주 좋은
Guilherme 페레이라

답변:


141

테이블이 PrimaryKey없이 발견되면 View로 취급됩니다.

그리고보기는 StorageModel \ EntitySet [n] \ DefiningQuery 요소의 EDMX 파일 (보려면 XML 편집기에서 열림)에 표시됩니다.

DefiningQuery가있는 경우 수정 함수를 추가하지 않는 한 엔티티는 읽기 전용이됩니다. 삽입, 업데이트 및 삭제 각각에 대해 하나씩 3 개의 수정 기능 (일명 저장 프로 시저)이 필요합니다.

그러나 두 가지 옵션이 있습니다.

키 정의 변경 :

  1. 그리고 EF가보기라고 생각하는 것이 실제로 테이블이라고 확신시킵니다.
  2. 또는 적절한 수정 기능 추가

귀하의 경우에는 (1)을 추천합니다.


접합 테이블에 엔터티를 추가하려고 할 때이 오류가 발생했습니다. 귀하의 제안으로 해결되었습니다. 감사합니다!
Walter Stabosz

그것은 우수한입니다 ... Tnks
모한 Gundlapalli

먼저 데이터베이스에서 생성하여 .edmx 파일을 "데이터베이스에서 업데이트 모델"을 클릭하는 것을 잊지 마세요
바샤 르 아부 Shamaa

나는 이상한 부분은, 그것이 우리의 로컬 및 테스트 환경에서 잘 작동, 그것은 단지 클라이언트의 환경에서 작동하지 않습니다 (지루한) 같은 문제에 직면하고있어
MOX 샤

13

테이블에 기본 키를 추가하기 만하면됩니다. 그게 다야. 문제 해결됨.

ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)

6

내 테이블에 기본 키가 없어서이 오류 메시지가 나타납니다. 내가 주목 한 한 가지는 테이블에 키를 추가 한 후 디자이너를 사용하여 edmx에서 테이블을 지우고 edmx를 저장 한 다음 다시 업데이트하여 테이블을 다시 추가해야한다는 것입니다. 키를 가져 오지 않았습니다. 이미보기로 할당 되었기 때문입니다. 이것은 edmx를 수동으로 편집 할 필요가 없었습니다.


5

테이블에 기본 키를 추가하고 edmx 모델에서 모델을 삭제 한 다음 데이터베이스에서 업데이트를 선택하고 빌드하고 실행합니다.


1

@Palantir. 두 테이블에 모두 기본 키가 설정되어 있는지 확인하고 테이블에 여러 기본 키가 설정되어 있는지 확인하십시오.


0
  1. .EDMX 파일은 메모장이나 메모장 ++ 또는 원하는 텍스트 편집기에서 수동으로 열어야합니다.
  2. 1 단계에서 연 파일에서 edmx : StorageModels의 항목을 찾습니다.
  3. DefiningQuery 요소를 찾아이 태그를 완전히 제거하십시오.
  4. store : Schema = "dbo"to Schema = "dbo"를 찾습니다 (이 단계를 건너 뛰면 이름이 잘못되었다는 오류가 생성됨).
  5. 파일을 저장하고 닫습니다.

문제가 해결되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.