2011-07-29 5 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ファイルを持っていますか?私がチェックすることはここにあります。このスキーマには、ストレージレイヤー、概念レイヤー、マッピングレイヤーの3つのレイヤーが存在することに注意してください。私はこれらのレイヤーのそれぞれを確認します(これはマッピングレイヤーに当てはまるとは確信していません)。重複したエンティティ - 特にCourtCaseが対象です。

EDMXがオンザフライで生成されている場合は、ファイルシステムにコピーを書き出して、より簡単に検査することができます。

私は、実行によってXMLデータを逆シリアル化する時点を過ぎているかどうかを知ることができます。これは、問題の原因としてXMLデータを排除するのに役立ちます。

を編集してください:オリジナルの投稿が「データベースを最初に」指定したと思います。私は "コード・ファースト"に精通していませんが、調べているうちにgreat walkthroughを見つけました。

編集2:もう少し調査した後 私の推測では、「その他」のタイプは規約の結果です。 these conventionsの一部を削除して試してください。

+0

新しいCourtCaseをCases DbSetに追加する呼び出し中に、デシリアライズ後にランタイム中にエラーが発生しています。私はEFにはとても新しいので、EDMXファイルが何であるか、そしてなぜそれが必要なのかを読み上げる必要があります。私のプロジェクトには1つもないので、実行時に多く生成されます。 –

+0

DbContextをインスタンス化すると、実際にエラーが発生します。 –

関連する問題