0

Entity Framework Code First (4.1) を使用して System.Data.Entity.DbContext.GetValidationErrors() を呼び出すと、次の例外が発生します。

"An item with the same key has already been added."

スタックトレースは次のとおりです。

at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at System.Data.Metadata.Edm.ObjectItemConventionAssemblyLoader.TryCreateType(Type type, StructuralType cspaceType, EdmType& newOSpaceType)
at System.Data.Metadata.Edm.ObjectItemConventionAssemblyLoader.LoadTypesFromAssembly()
at System.Data.Metadata.Edm.ObjectItemAssemblyLoader.Load()
at System.Data.Metadata.Edm.ObjectItemAssemblyLoader.LoadAssemblies(IEnumerable`1 assemblies, ObjectItemLoadingSessionData sessionData)
at System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly, Boolean loadReferencedAssemblies, ObjectItemLoadingSessionData loadingData)
at System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly, Boolean loadReferencedAssemblies, KnownAssembliesSet knownAssemblies, EdmItemCollection edmItemCollection, Action`1 logLoadMessage, Object& loaderCookie, Dictionary`2& typesInLoading, List`1& errors)
at System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache(ObjectItemCollection objectItemCollection, Assembly assembly, Boolean loadReferencedAssemblies, EdmItemCollection edmItemCollection, Action`1 logLoadMessage)
at System.Data.Metadata.Edm.ObjectItemCollection.ExplicitLoadFromAssembly(Assembly assembly, EdmItemCollection edmItemCollection, Action`1 logLoadMessage)
at System.Data.Metadata.Edm.MetadataWorkspace.ExplicitLoadFromAssembly(Assembly assembly, ObjectItemCollection collection, Action`1 logLoadMessage)
at System.Data.Entity.Infrastructure.DbCompiledModel.CreateObjectContext[TContext](DbConnection existingConnection)
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at System.Data.Entity.Internal.LazyInternalContext.get_ObjectContext()
at System.Data.Entity.Internal.InternalContext.DetectChanges(Boolean force)
at System.Data.Entity.Internal.InternalContext.GetStateEntries(Func`2 predicate)
at System.Data.Entity.DbContext.GetValidationErrors()

残念ながら、問題がどこから発生しているのか、またどの poco エンティティがこれを引き起こしているのかを特定することはできませんでした.

誰かが手がかりを持っていますか?

ありがとう

4

1 に答える 1

1

ええ、これは楽しいものです。ここでの問題は、既にコンテキストにアタッチされているエンティティを再アタッチしようとすることにあります。これは、論理エラーが原因である可能性があります。または、添付されたオブジェクトをクリアせずにコンテキストを再利用している可能性があります。データベースには、コンテキストに現在アタッチされているアイテムを確認するために使用できるローカル コレクションがあります。

ctx.YourEntityCollection.Local
于 2012-08-03T12:49:57.920 に答える