ADO.NET Entity Framework : 업데이트 마법사가 테이블을 추가하지 않습니다.


93

나는 새로운 ADO.Net 엔터티 데이터 모델을 추가 내 프로젝트에와 사용 업데이트 마법사를 모델로 테이블을 추가 할 수 있습니다. 선택한 테이블 중 5 개가 디자인 화면에 추가되었습니다. 다른 두 테이블은 추가되지 않습니다. 마법사에서 선택하고 마침을 클릭했지만 디자인 화면에는 나타나지 않습니다.

이것은 버그입니까, 아니면 테이블을 모델에 추가 할 수없는 상황이 있습니까 (설계 상)?


업데이트 : XML (*. edmx)이 문제를 보여줍니다.

<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not 
have a primary key defined and no valid primary key could be inferred. 
This table/view has been excluded. To use the entity you will need to 
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
    <Property Name="role_id" Type="decimal" />
    <Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->

8
이것은 더 많은 투표를해야합니다. .edmx 파일이 실제로 오류가 발생하는 유일한 장소이기 때문에 Visual Studio가 테이블을 추가 할 수 없다는 것을 전혀 몰랐습니다. v2에 대화 상자가 있기를 바랍니다!
John Bubriski

+1-제 경우에는 오류 메시지가 없었습니다.
teynon 2013-08-14

앞서 언급했듯이 가져 오지 않는 테이블에는 기본 키가 없습니다. PK를 추가하면 좋습니다.
Eric

답변:


46

디자인 화면은 엔터티 모델과 다릅니다. 디자인 화면에 나타나지 않는 EDMX의 매핑에 테이블이있을 수 있습니다. 파일을 XML로보고이 경우인지 확인하십시오. 이 경우 테이블이 이미 엔터티 모델의 일부이므로 업데이트 마법사를 사용하여 테이블을 다시 추가 할 수 없습니다. 따라서 일반적으로 업데이트 마법사는 디자인 화면 자체 보다 엔터티 모델에 대해 더 많이 알고 있습니다 .

이것이 바로 당신이 처한 상황이라고 생각하지는 않지만 솔루션에 대한 일반적인 아이디어를 제공해야합니다. XML로 이동하여 해당 테이블에 대한 참조를 찾으십시오.


4
방금이 문제가 발생했습니다. 모델에서 테이블을 삭제했고 다시 추가하려고했을 때 비주얼 디자이너가 데이터베이스에있는 것으로 표시하지 않았습니다. 그것을 둘러보기 위해 .edmx 파일에서 텍스트를 삭제했지만 XML을 엉망으로 만들었습니다. 이 경우 혹시라도 파일을 먼저 백업하십시오. 다행히 git diff로 엉망인 태그를 찾을 수있었습니다.
GrandMasterFlush 2011

41

모든 테이블에 기본 키를 설정하거나 각 테이블의 모든 열에 하나의 선택되지 않은 확인란 "널 허용"을 설정합니다. 그것은 나를 위해 작동합니다 :)


2
나는 이것이 정답이라고 믿는다. 적어도 그것은 나를위한 것이었다. 감사!
에릭

@Parvinder, 저는 대부분의 프로젝트에서이 문제로 어려움을 겪었습니다. 결국, 당신의 대답은 나를 위해 모든 것을 명확하게했습니다. 제 경우에는 In Joining 테이블에서 Not null 키 필드 또는 기본 키를 지정하지 않았습니다. 이것을 고친 후 나는 마음의 평화를 얻었습니다. 고마워요
PatsonLeaner

해결 방법으로 이해 한 것은 i) 해당 테이블에 기본 키가 없거나 (ii) 해당 테이블에 Null 허용 열이없는 경우 엔터티 모델에 테이블을 추가 할 수 없다는 것입니다.
Murtuza Khan

10

1. 테이블 구조를 변경하고 기본 열을 추가합니다. 모델을 업데이트하십시오.

2. XML 편집기에서 .EDMX 파일을 수정하고이 특정 테이블의 태그 아래에 새 열을 추가해보십시오. (작동 안 할 것이다)

3. Exiting 테이블에 대한 새로운 Primary Column을 생성하는 대신 기존의 모든 컬럼을 포함하여 복합 키를 생성합니다.

Entity Framework : 기본 키가없는 DataTable을 엔터티 모델에 추가합니다.


나는이 같은 문제에 부딪쳤다. 엔터티 모델이 테이블을 추가했지만 디자이너에 표시되지 않았습니다. 나는 또한 그것을 코드로 접근 할 수 없었다. ID 필드 키를 추가했습니다 ... 작동했습니다!
Ravi Ram

6

나도이 문제가 있었고 위의 모든 것이 저에게 효과가 없었습니다. 저에게 도움이 된 것은 다음과 같습니다.

데이터베이스에 연결하려고하면 해당 데이터베이스는 다른 자격 증명을 가진 다른 사용자를 가질 수 있습니다. 사용자 A가 D까지라고 가정하겠습니다.

사용자와 연결을 시도하는 경우 사용자에게 올바른 자격 증명이 활성화되어 있는지 확인하십시오.이 경우 읽기 및 쓰기 옵션이 활성화되어 있습니다.

이렇게하려면 SQL 서버에 연결된 MS SQL Server Managment Studio를 시작하고 Visual Studio에서 연결하려는 데이터베이스를 선택합니다. 'your_dbname'-> 보안-> 사용자 아래에 사용자 목록이 있습니다. 로그인하려는 사용자 이름을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다. 창이 열립니다. '일반'(기본적으로 선택됨) 페이지를 선택하고 '데이터베이스 역할 멤버십'탭에서 'db_datareader'및 'db_datawrite'가 선택되었는지 확인합니다.

참고 : MS SQL Server Managment Studio에 너무 로그인하는 경우 이러한 옵션을 활성화 / 비활성화 할 수있는 사용자로 로그인해야합니다.


5

특정 테이블에서 'Null'을 확인하십시오. 모든 열이 'Null 허용'으로 설정된 경우 Entity Framework는이를 'Null'테이블로 간주합니다. 나는 같은 문제가 있었고 'Allow Null'을 선택 취소하고 필요한 테이블을 추가했습니다.


1
작동합니다. 어리석은 오류나 경고가 로그에 나타나지 않습니다!
RolandoCC



1

이 문제는 최신 버전 (환경 : VS 2012, .net framework 4.5)에서 해결되었습니다. .edmx 파일을 열고 필요한 테이블 / 저장 프로 시저 / 뷰를 추가하기 만하면됩니다. 기본 키가없는 테이블 / 뷰는 읽기 전용 테이블 / 뷰로 생성됩니다.

테이블 / 뷰 'TABLE_NAME'에 기본 키가 정의되어 있지 않습니다. 키가 유추되었고 정의가 읽기 전용 테이블 / 뷰로 생성되었습니다.


1
EF 5.0의 경우에 어쨌든 이벤트에 오류 남아
그렉 Z.

0

전체 모델을 삭제할 필요는 없습니다 (수백 개의 테이블이 될 수 있습니다!).

마법사는 "새로 추가"항목을 처리 할 수 ​​있지만 복합 키 변경 및 열 이름 변경과 같은 일부 변경 사항은 수행 할 작업을 알지 못하므로 시도하지 않으며 모든 것이 동기화되지 않습니다.

SO : 모델 (개념적 모드) 및 Model.Store에서 문제의 테이블을 삭제 한 다음 마법사를 사용하여 모델을 업데이트하고 문제의 테이블 만 다시 추가하십시오.


0

이전에이 작업을 수행하지 않은 사람을 위해 더 자세한 정보를 제공합니다. 업데이트 4가 설치된 Visual Studio 2013을 사용하고 있습니다. 테이블에 일부 필드를 추가하고 모델에서 테이블을 삭제 한 다음 업데이트를 진행했는데 테이블을 확인할 수 없었습니다.

기본 키가 있습니다.

나는 새로운 테스트 테이블을 만들었는데, 그것은 내가 그것을 확인할 수는 있지만 내 원본은 아닙니다.

나는 전에 그것을 XML로 열어 본 적이 없으며 그것을 수행하는 방법을 몰랐다. .edmx 파일을 마우스 오른쪽 버튼으로 클릭하고 "다음으로 열기"-xml 편집기를 선택합니다.

문제의 테이블은 괜찮 았고 새로운 필드 (이상한)도있었습니다.

나는 그것에 대한 모든 참조를 삭제했습니다 (두 번 걸림)-하나를 삭제하고 저장 한 후, 그것을 열려고하는데 그것이 표시되지 않는다면 그냥 계속해서 "XML보기"를 선택하십시오-오류를 살펴보고 기본적으로 당신이 그것을 청소할 때까지 튀는 공을 따르십시오.

추가 세부 사항이 누군가에게 도움이되기를 바랍니다.


0

내가 찾은 쉬운 방법 중 하나는 (SQL Server Management Studio에서) INT 유형의 ID 열을 추가하고 "Null 허용"을 선택 취소 한 다음 열 속성 (ID의) >> ID 사양 >> 확인 (ID)에서 확인하는 것입니다. 증분이 설정되어 있는지 확인하십시오.

위의 작업이 완료되면 .edmx 창으로 돌아가서 마우스 오른쪽 버튼을 클릭하고 데이터베이스에서 모델 업데이트를 수행합니다.


0

기본 키 열 크로스 테이블을 추가 할 수 있습니다. 그러면 문제가 해결됩니다.


0

또 다른 해결책은 데이터베이스에 액세스하는 계정에 테이블에 대한 일부 권한이 있는지 확인하는 것입니다. 최소한 선택하십시오. 계정에 권한이 없으면 테이블이 추가되지 않습니다.

보안의 SSMS에서 사용자 또는 역할을 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭합니다. 그런 다음 Securables를 클릭하십시오. 상단 테이블은 현재 액세스 가능한 테이블을 보여줍니다. 누락 된 테이블이 없으면 검색을 클릭하여 찾은 다음 상단 테이블에서 강조 표시 한 다음 하단 테이블에 권한을 할당하십시오.

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