0

エンティティのリストにアクセスしているときに、システムは「メモリ不足」例外をスローします。

呼び出しスタックには、アプリケーションがメモリ不足になるまで繰り返される呼び出しのブロックがあります。

コール スタック:

.
.
.
at System.Data.Query.InternalTrees.BasicOpVisitorOfT`1.VisitNode(Node n)
/* Repeating Block */
at System.Data.Query.InternalTrees.BasicOpVisitorOfNode.VisitChildren(Node n)
at System.Data.Query.PlanCompiler.JoinElimination.VisitDefaultForAllNodes(Node n)
at System.Data.Query.PlanCompiler.JoinElimination.VisitDefault(Node n)
at System.Data.Query.InternalTrees.BasicOpVisitorOfNode.VisitPhysicalOpDefault(PhysicalOp op, Node n)
at System.Data.Query.InternalTrees.BasicOpVisitorOfT`1.Visit(PhysicalProjectOp op, Node n)
at System.Data.Query.InternalTrees.PhysicalProjectOp.Accept[TResultType](BasicOpVisitorOfT`1 v, Node n)
at System.Data.Query.InternalTrees.BasicOpVisitorOfT`1.VisitNode(Node n)
/* Repeating Block */
at System.Data.Query.PlanCompiler.JoinElimination.Process()
at System.Data.Query.PlanCompiler.PlanCompiler.Compile(List`1& providerCommands, ColumnMap& resultColumnMap, Int32& columnCount, Set`1& entitySets)
at System.Data.Query.PlanCompiler.PlanCompiler.Compile(DbCommandTree ctree, List`1& providerCommands, ColumnMap& resultColumnMap, Int32& columnCount, Set`1& entitySets)
at System.Data.EntityClient.EntityCommandDefinition..ctor(DbProviderFactory storeProviderFactory, DbCommandTree commandTree)
at System.Data.EntityClient.EntityProviderServices.CreateCommandDefinition(DbProviderFactory storeProviderFactory, DbCommandTree commandTree)
at System.Data.EntityClient.EntityProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree)
at System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree)
at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Prepare(ObjectContext context, DbQueryCommandTree tree, Type elementType, MergeOption mergeOption, Span span, ReadOnlyCollection`1 compiledQueryParameters, AliasGenerator aliasGenerator)
at System.Data.Objects.EntitySqlQueryState.GetExecutionPlan(Nullable`1 forMergeOption)
at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Objects.ObjectQuery`1.Execute(MergeOption mergeOption)
at System.Data.Objects.DataClasses.EntityCollection`1.Load(List`1 collection, MergeOption mergeOption)
at System.Data.Objects.DataClasses.EntityCollection`1.Load(MergeOption mergeOption)
at System.Data.Objects.DataClasses.RelatedEnd.Load()
at System.Data.Objects.DataClasses.RelatedEnd.DeferredLoad()
at System.Data.Objects.Internal.LazyLoadBehavior.LoadProperty[TItem](TItem propertyValue, String relationshipName, String targetRoleName, Boolean mustBeNull, Object wrapperObject)
at System.Data.Objects.Internal.LazyLoadBehavior.<>c__DisplayClass7`2.<GetInterceptorDelegate>b__1(TProxy proxy, TItem item)

ここで何が問題なのか、または問題をデバッグする方法についてのヒントはありますか?

モデル化しようとしている階層は少し大きく、3 レベルの継承があります。

ここに画像の説明を入力

A1 から派生したクラスは約 20 個、A2 から派生したクラスは約 30 個あります。タイプ「A」のオブジェクトにアクセスしようとすると、システムが「メモリ不足」になります。問題は、EF が実行計画と対応する SQL を生成してタイプ 'A' の項目にアクセスしようとする方法にあるようです。

4

1 に答える 1

0

マッピングを TPT から TPH に移動することで問題を解決できました。また、同じ名前の列の名前を変更することで、EF Code Firstの文書化されたバグを回避する必要がありました。

今、EFの起動時間が数時間に及ぶ問題に悩まされています。私はSO、ここに同じものを投稿しました。

于 2013-01-14T06:47:04.000 に答える