이 오류가 발생하는 이유 : 다음 EntitySet / AssociationSet-Entity1에 대해 지정된 매핑이 없습니까?


96

Model First 접근 방식으로 Entity Framework 4를 사용하고 있습니다.

프로젝트를 시작하고 엔터티를 설계하고 데이터베이스를 생성했습니다. 모든 것이 잘 작동했습니다.

그런 다음 돌아가서 내 모델에 다른 엔티티를 추가해야했습니다. 그러나 엔티티를 EDMX로 끌면 다음 오류가 발생합니다.

여기에 이미지 설명 입력

좋구나! Entity1을 테이블에 매핑하기 만하면됩니다.하지만 헤이! Model First 접근 방식을 사용하고 있으며 DDL을 생성 할 때 테이블을 생성 할 것으로 예상합니다.

이 오류를 어떻게 해결합니까?


1
그렇다면 모델에서 데이터베이스 스크립트를 생성 할 수 있습니까?
Ladislav Mrnka 2011

답변:


147

이것은 EF4가 모델 우선으로 작동하는 방식 때문입니다.

모델 우선 모델을 처음 생성하면 SSDL이 존재하지 않는 상태입니다. 엔티티를 드래그하고 연관시킬 수 있지만 EDMX 파일에서 SSDL을 살펴보면 엔티티 중 SSDL에 연관된 스토리지 테이블이 없음을 알 수 있습니다.

Generate Database From Model상황에 맞는 메뉴 항목 을 클릭하면 변경됩니다 . 혼란스러운 부분은이 작업이 단순히 DDL 스크립트를 생성하는 것 이상을 수행한다는 것입니다. 실제로 SSDL 정보를 포함하도록 EDMX 파일을 변경합니다. 이 시점부터 EDMX 파일은 디자이너 / CSDL의 모든 엔터티가 SSDL의 엔터티에 매핑되어야하는 상태가됩니다. 매핑되지 않으면 컴파일 시간 오류가 발생합니다.

다음 EntitySet / AssociationSet-(EntityName)에 대해 지정된 매핑이 없습니다.

또 다른 흥미로운 사실은 컴파일을 방해하는 종류의 오류가 아니라는 것입니다. 실제로 출력 클래스 라이브러리를 생성합니다. 경고 나 뭐 그런 거 아니야?

이 오류를 방지하려면 새 엔티티를 삽입 한 후 Generate Database From Model다시 해야 합니다. 그러면 SSDL이 업데이트되고 매핑이 수정됩니다.

편집하다

model-first를 사용하지 않고 "데이터베이스에서 업데이트"하면 DB 서버에서 테이블을 삭제 한 경우에도이 오류가 발생합니다. Entity Framework가 자동으로 엔터티를 삭제하지 않기 때문입니다. 엔티티를 수동으로 삭제하면 오류가 사라집니다.


1
bd 변경에 대해 모델을 업데이트 한 후에도 동일한 문제가 발생했습니다 (내 접근 방식이 모델 우선이 아니기 때문에 좋지 않을 수 있음).
balanza 2013

5
@balanza, model-first를 사용하지 않고 데이터베이스를 기반으로 모델을 업데이트하면 EF 디자이너가 엔터티를 자동으로 삭제하지 않기 때문에 서버에서 테이블을 삭제할 때이 오류가 발생합니다. 엔티티 유형을 수동으로 삭제하면 오류가 사라집니다
André Pena 2013

엔티티 데이터 모델의 xml 파일에서 직접 변경했습니다. 많은 테이블과 함수가 있었고 불일치 위험이 있으므로 수동으로 수행했습니다.
Bat_Programmer

이것은 매우 유용합니다. 또한 model-first 및 "update from database"를 사용하고 새 테이블을 가져 오는 경우에도 오류가 발생합니다. 그러나 모델에서 데이터베이스 생성을 실행하면 (생성 된 스크립트를 실제로 실행할 필요가 없습니다. 데이터를 죽일 것입니다!) 코드의 매핑 문제를 해결하고 앞으로도 사용하는 데 문제가 없습니다.
Brian Warshaw 2015 년

1
이미 배포 된 SQL Server CE 데이터베이스에 대한 스키마 업데이트를 어떻게 처리 하시겠습니까? 완전히 관련이없는 절차 인 경우이 문제를 별도의 질문으로 이동할 수 있습니다.
FYK

35

두 엔터티 간의 연결을 만든 후 참조 제약 조건을 만드는 것을 잊었 기 때문에 동일한 오류가 발생하는 것을 발견했습니다.


13
참고 : 연관 속성을 확인하면 하단의 "Referential Constraint"가 비어 있습니다. 줄임표를 클릭하고 제약 조건을 만듭니다.
Patrice Calvé 2014 년

이것은 나를 도왔다. 원래 엔터티에서 탐색 엔터티로 1 .. * 관계를 만들어야했습니다.
duyn9uyen

21

오류 3027 : 다음 EntitySet / AssociationSet에 대해 지정된 매핑이 없습니다 ... "-Entity Framework 문제

Entities Framework로 모델을 개발하는 경우 때때로 다음과 같은 성가신 오류가 발생할 수 있습니다.

오류 3027 : 다음 EntitySet / AssociationSet [엔티티 또는 연결 이름]에 대해 지정된 매핑이 없습니다.

이것은 EDM에서 모든 것이 잘 보이는 경우 이해가되지 않을 수 있지만이 오류는 일반적으로 EDM과 관련이 없기 때문입니다. "데이터베이스 파일 재생성"이라고 말해야합니다.

엔티티는 빌드 중에 SSDL 및 MSL을 확인하므로 EDM을 변경했지만 데이터베이스 모델 생성을 사용하지 않는 경우 SQL 스크립트에 누락 된 항목이 있다고 불평합니다.

간단히 말해서 해결책은 " 모델을 먼저 개발하는 경우 EDM을 업데이트 한 후 매번 데이터베이스 모델생성하는 것을 잊지 마십시오 . 문제가 해결되기를 바랍니다."입니다.


이 모델은 예외 취소 도움이 데이터베이스 생성하고이 동일한 오류 일
kolexinfos

7

제 경우에는 다른 개발자가 기본 데이터베이스에서 일부 테이블을 제거했습니다. 이것을 깨달았고 엔티티에서이 테이블을 제거했을 때 문제가 해결되었습니다. 들리는 것만 큼 분명하지 않았습니다.


6

같은 오류가 발생했지만 모델 우선을 사용하지 않았습니다. 내 EDMX 파일에는 디자이너에 표시되지 않았지만 테이블에 대한 참조가 포함되어있는 것으로 나타났습니다. 흥미롭게도 Visual Studio (2013)에서 테이블 이름에 대한 텍스트 검색을 수행했을 때 테이블을 찾을 수 없습니다.

이 문제를 해결하기 위해 외부 편집기 (Notepad ++)를 사용하여 EDMX 파일에서 문제가되는 테이블에 대한 참조를 찾은 다음 (주의 깊게) 테이블에 대한 모든 참조를 제거했습니다. 처음에 EDMX 파일이 어떻게이 상태가되었는지 모르겠다 고 말해서 유감입니다.


5

테이블 변경이 있었고 edmx 모델 브라우저에서 확인 한대로 끝에 숫자 1이있는 다른 엔티티 (예 : MyEntity1및 a MyEntity)가 생성되었습니다. 두 엔티티에 대한 무언가가 함께 처리를 혼란스럽게했습니다.

테이블을 제거하고 다시 추가하면 문제가 해결되었습니다.


TFS가 연결되어 있으면 삭제 후 edmx 체크인을 수행하십시오. 그런 다음 최신 버전을 가져와 명확한 2 단계 프로세스로 다시 추가하십시오. 그렇지 않으면 TFS가 문제를 일으키는 것으로 보이는 동일한 명명 된 엔터티를 삭제하고 다시 추가하는 것과 혼동됩니다.


테이블 변경 후에도 동일한 문제가 발생했습니다. 모델 아래 여러 곳에서 숫자 1과 2 (MyEntity1, MyEntity2)를 가진 동일한 엔티티를 발견했습니다. 모든 브랜치 (다이어그램, 엔티티 유형 등)를 살펴보고 MyEntity 및 MyEntity [n]의 모든 인스턴스를 제거했습니다. 좋은 측정을 위해 "깨끗한 솔루션"을 수행 한 다음 데이터베이스에서 업데이트하여 MyEntity 만 다시 추가했습니다.
MsTapp

4

더 빠른 방법은 테이블을 삭제하고 다시 추가하는 것이 었습니다. 자동 매핑되었습니다. :)


2

Database First접근 방식 을 사용하는 사람들의 경우 새 엔티티를 삽입 한 후해야 할 일은 파일 Generate Database From Model을 마우스 오른쪽 버튼으로 클릭 .edmx하고 선택하는 것입니다.Generate Database From Model...


0

데이터베이스에서 테이블을 삭제했을 때이 오류가 발생했습니다. EDMX 다이어그램을 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동하여 속성 창의 목록에서 테이블을 선택하고 다이어그램에서 삭제 (삭제 키 사용)하여 문제를 해결했습니다.


0
  1. 솔루션 탐색기로 이동하여 검색 버튼을 클릭합니다.
  2. 휴가가 선택 모두 Search within file contentSearch External Files
  3. 매핑이 인식하지 못하는 엔티티 이름을 입력합니다.
  4. 문제와 관련된 모든 파일을 삭제하십시오. 그것들은 아마도 같은 실종 된 개체의 이름을 따서 명명 될 것입니다. 특히 확장자가 .cs 또는 .tt 인 경우 파일에서 컨텍스트 클래스 이름이있는 파일을 삭제하지 마십시오. 컨텍스트 .cs 파일 .
  5. 누락 된 엔티티를 참조하는 모든 코드 줄을 제거합니다. 다음과 같이 표시됩니다.

    public virtual DbSet< Entity1> Entity1 { get; set; }

이 오류는 데이터베이스에서 삭제 된 테이블에 일반적입니다.

데이터베이스에서 테이블을 삭제하거나 web.config.connectionStringsEF Mapped 데이터베이스에 대한를 변경 하면 원래 매핑을 생성하는 데 사용 된 것이 아니라 새 테이블을 가리 키도록하는 것이 문제입니다.

이 새로운 db는 3027 오류가있는 엔티티가 존재하지 않습니다.


0

저장 프로 시저에 대한 사용자 지정 결과를 만들려고 할 때 오류가 발생했으며 엔터티 여야한다고 가정했습니다.

해결책은 방금 모델 브라우저에서 복잡한 유형을 만들고 "Edit function imports"에 그 결과를 할당했습니다.

이 질문 이이 오류가 발생하면 Google이 당신을 데려가는 것처럼 보이기 때문에 여기에 추가하겠습니다.


0

모든 것을 올바르게 설정했지만 (카디널리티 및 종속 속성) 계속 오류가 발생하는 이유를 파악할 수 없습니다. 마지막으로 EF는 자체적으로 종속 테이블 (table_tablecolumn)에 열을 생성했으며 테이블과의 관계가 없으므로 매핑이 지정되지 않았습니다. EDMX 파일의 열을 삭제하고 문제를 해결 한 솔루션을 다시 빌드해야했습니다. DB 접근 방식을 사용하고 있습니다.


0

데이터베이스에서 모델 업데이트가 작동하지 않습니다.

충돌하는 엔터티를 제거한 다음 데이터베이스에서 모델 업데이트를 실행하고 마지막으로 솔루션을 다시 빌드해야했습니다. 그 후 모든 것이 잘 작동합니다.


0

다른 사람들을 위해 이것을 공유합니다. 제 경우에는 공유 MVC 솔루션을 개발하고 드롭 다운에 사용하는 테이블에 공통 모듈을 사용했습니다. 새 테이블을 추가하여 엔티티 모델을 업데이트 할 때 오류가 발생했습니다. EDMX를 업데이트했을 때 데이터베이스에 대한 내 권한 액세스가 업데이트되었을 가능성이 높아서 특정 테이블에 액세스 할 수 없게되었습니다 no mapping specified.

다시 추가하고 사용자에게 액세스 권한을 부여하면 문제가 해결되었습니다.


0

이름을 바꾸고 다시 추가하기 전에 edmx에서 일부 테이블을 명시 적으로 삭제하지 않았기 때문에 이것을 얻은 것 같습니다. 대신 테이블의 이름을 변경 한 다음 데이터베이스에서 모델 업데이트를 수행하여 사라진 것을보고 모델에서 삭제할 것이라고 생각했습니다. 그런 다음 데이터베이스에서 다른 업데이트 모델을 수행하고 이름이 변경된 테이블을 추가했습니다.

사이트는 새 테이블로 작업하고 있었지만 오류가 발생했습니다. 결국 원래 테이블이 여전히 모델에 있다는 것을 알았습니다. 모델에서 삭제 한 후 (edmx 화면에서 클릭, 키 삭제) 오류가 사라졌습니다.

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