2011-07-29 8 views
4

코드 첫 번째 EF 4.1 구현이라고 생각합니다. 데이터베이스는 이미 존재하며 기본 모델은 이미 존재합니다 (들어오는 XML 데이터 용 XSD.exe에 의해 생성됩니다). 내 자신의 매핑을 작성하고 모델이 Entity Framework에서 제대로 작동하도록 업데이트했습니다.모델 생성 중 유효성 검사 오류

나는 아래의 오류가 발생하고있어 코드를 실행하려고하면 :

One or more validation errors were detected during model generation:

System.Data.Edm.EdmEntityType: Name: Each type name in a schema must be unique. Type name 'CourtCase' is already defined.

내가 확인했는데 확인 두 배 확실히에만이 클래스는 한 위치에 정의합니다. 또한 DbContext가 자체 모델을 만들지 않도록하기 위해 아래 줄에 익숙해졌습니다.

내 XML 데이터는 내 모델로 직렬화되고 다음 단순히 데이터베이스에 저장하기 위해 노력하고있어
Database.SetInitializer<LoadContext>(null); 

:

var serializer = new XmlSerializer(typeof (CourtCase)); 
var xmlReader = new XmlTextReader(
    new MemoryStream(Encoding.Default.GetBytes(_itemText))); 

_deserializedCase = (CourtCase) serializer.Deserialize(xmlReader); 

Database.SetInitializer<LoadContext>(null); 
using (var dbContext = new LoadContext()) 
{ 
    dbContext.Cases.Add(_deserializedCase); 
    dbContext.SaveChanges(); 
} 

DbContext :

public class LoadContext : DbContext 
{ 
    public DbSet<CourtCase> Cases { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 
    modelBuilder.Configurations.Add(new CaseMap()); 
    etc. 
    } 
} 

암의 I Entity Framework 구성의 다른 핵심 구성 요소가 누락 되었습니까?

전체 스택 추적

at System.Data.Entity.ModelConfiguration.Edm.EdmModelExtensions.ValidateAndSerializeCsdl(EdmModel model, XmlWriter writer) 
    at System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo) 
    at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) 
    at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) 
    at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) 
    at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() 
    at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) 
    at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() 
    at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() 
    at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) 
    at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity) 
    at System.Data.Entity.DbSet`1.Add(TEntity entity) 
+0

컴파일 타임에 또는 런타임에 검증 오류가 언제 반환됩니까? 런타임에 코드의 어느 시점에 있습니까? 디자인 타임에 EDMX 파일을 가지고 있습니까? 아니면 즉석에서 컴파일됩니까? –

답변

2

본질적으로 순환 참조 A.B.C.A (원래 클래스는 매우 저조한 XML 스키마에서 생성 된 클래스) 집합을 발견했습니다. 순환 참조를 제거하면이 오류가 해결되었습니다.

1

는 디자인 타임에 즉시 또는 사용 가능한 생성 여부, 당신은 아마 오른쪽 솔루션 내에서 EDMX 파일이? 내가 검사 할 것 인 것은 여기에서있을 것이다. 이 스키마에는 스토리지, 개념 및 매핑 레이어라는 세 가지 레이어가 있음을 기억하십시오. 나는 중복 엔티티 (특히 CourtCase는 entitiy)에 대해 이러한 각 레이어 (매핑 레이어에 적용되는지는 확실하지 않음)를 확인합니다.

EDMX가 즉시 생성되면 파일 시스템에 사본을 작성하여 더 쉽게 검사 할 수 있습니다.

XML 데이터를 deserialize 할 때 실행이 지나치게된다면 알고 싶습니다. 이렇게하면 XML 데이터를 문제의 원인으로 간주하는 데 도움이됩니다.

편집 : 원래 게시물에 "데이터베이스 우선"이 지정되어 있다고 생각합니다. 나는 "코드 우선"에 익숙하지 않았지만 조사 중에 이것을 발견했다. great walkthrough.

편집 2 : 조금 더 조사한 후 내 생각에 '기타'유형은 규칙의 결과입니다. these conventions 일부를 제거하여 실험 해보십시오.

+0

Cases DbSet에 새 CourtCase를 추가하기 위해 호출하는 동안 deserialization 후 런타임 중에 오류가 발생합니다. 나는 EF에 매우 익숙해 졌으므로 EDMX 파일이 무엇인지 그리고 왜 필자가 필요로하는지에 관해 읽을 필요가있다. 내 프로젝트에는 하나도 없으므로 런타임 중에 많이 생성됩니다. –

+0

DbContext를 인스턴스화 할 때 실제로 오류가 발생합니다. –