1

VB .NET 4 WinForms 응용 프로그램.Entity Framework SaveChanges - INSERT에서 ID/ID 필드를 무시하는 방법

IEnumerable (Of MyClass)에 바인딩 된 (DevExpress) 그리드가 있습니다. 새 행이 추가 될 때마다 ID의 기본값은 영 (0)입니다. SaveChanges를 시도 할 때 EntityFramework는 ID 필드가 삽입시 내용을 무시하고 다른 값을 삽입해야한다는 것을 인식하지 못합니다. ID를 0으로 유지하기 때문에 null/Nothing을 지정할 수 없습니다.

수동으로 MyClass의 인스턴스를 추가하고 저장할 수 있지만 그리드가 새 항목을 추가/초기화하는 등의 작업을 수행하려고합니다. 내가 알 수있는 한, 문제는 그리드가 아니라 Entity Framework 및 생성 된 SQL 및 엔티티 클래스와 관련됩니다.

{"Cannot insert explicit value for identity column in table 'MyClasses' when IDENTITY_INSERT is set to OFF."} 

내 노트북을 창밖으로 던지 지 못하게하는 어떤 도움이라도 대단히 감사하겠습니다!

+2

DB 테이블에 ID가없는 것으로 보입니다. – Restuta

+0

edmx를 게시 할 수 있습니까? – RobS

답변

4

데이터베이스의 엔터티 속성이 Identity (자동 증가 값) 인 경우 엔티티 모델의 StorageModel에 지정됩니다. 아마도이 설정은 특정 필드에 맞지 않습니다. 모델의 edmx 파일을 열고 StorageModels 섹션을 보면이 사실을 확인할 수 있습니다. 그것은 다음과 같아야합니다

<edmx:StorageModels> 
    ... 
    <EntityType Name="MyClass"> 
    <Key> 
     <PropertyRef Name="ID" /> 
    </Key> 
    <Property Name="ID" Type="..." Nullable="..." StoreGeneratedPattern="Identity" /> 
    ... 
    </EntityType> 
    ... 
</edmx:StorageModels> 

StoreGeneratedPatternIdentity로 설정해야합니다. None이 있거나 속성이 누락 된 경우 (기본값은 None) EntityFramework는이 경우 ID이 신원이며 생성 된 SQL-INSERT에서 열에 대한 값을 발급한다는 것을 모르기 때문에 실제로 설명한 오류가 발생합니다 성명서.

(당신이 정말로 edmx 파일의 edmx:StorageModels 부분을 체크되어 있는지 확인합니다. edmx:ConceptualModels 부분뿐만 아니라 재산의 속성 annotation:StoreGeneratedPattern을 가지고 있지만 그 설정은 특정 문제에 대한 문제가되지 않습니다. (나는 그 때에 만 중요하다고 생각합니다 데이터베이스는 모델에서 생성되지만 확실하지는 않습니다.)

+0

이상하게도 다른 엔티티는 EDMX에 SGP가 지정되어 있으며 디자이너에는 모두 동일한 설정 (엔티티 키, ID 등)이 있지만 EntityType 섹션에는 문제의 클래스 만 StoreGeneratedPattern = "Identity"가 없습니다. XML 편집의 양은 지금까지 매우 실망 스럽습니다 ... 그러나 MSDN과 몇몇 유명 인사 ORM 및 .NET 블로거가 대답 할 수없는 것에 대해 많은 감사드립니다! – nathanchere

+0

데이터베이스의 열이 ID 인 경우 어떻게이 설정이 누락 될 수 있는지 궁금합니다. DB 테이블의 ID가 아닌 열에서 나중에 (모델을 처음 만든 후) 열을 변경했는데 데이터베이스에서 모델을 업데이트하는 것을 잊었습니까? 솔직히 실제로 자동으로 업데이트되는지 확실하지 않습니다. 테스트 할 대상입니다. – Slauma

관련 문제