6

EF の変更追跡と遅延読み込み機能が原因で、クエリの 1 つで問題が発生しています。クエリの結果を取得した後、AutoMapper を使用してドメイン オブジェクトをビジネス モデルにマップしていますが、コンテキストが破棄されているため、例外がスローされ続けます。

ObjectContext インスタンスは破棄されており、接続を必要とする操作には使用できなくなりました。

デバッガーで結果のコレクションを見ると、それがリストでDynamicProxyあり、実際のエンティティではないことがわかります。Change Tracking を停止しようとしましたが、解決しませんでした。これが私のコードです:

    public List<ContentTypeColumn> GetContentTypeColumns(Int64 contentTypeId)
    {
        List<ContentTypeColumn> result = new List<ContentTypeColumn>();
        using (SCGREDbContext context = new SCGREDbContext())
        {                
            ContentType contentType = context.ContentTypes.Include("Parent").AsNoTracking().FirstOrDefault(x => x.Id.Equals(contentTypeId));

            result.AddRange(contentType.ContentTypeColumns.ToList());
            while (contentType.Parent != null)
            {
                result.AddRange(contentType.Parent.ContentTypeColumns.ToList());
                contentType = contentType.Parent;
            }    
        }
        return result.ToList();
    }

注: この操作に関連する私のドメイン モデルを調べる必要がある場合は、この質問を参照してください。

4

1 に答える 1

20

遅延読み込みと動的変更追跡を停止する必要がある場合は、単にオフにすることができます。

using (SCGREDbContext context = new SCGREDbContext())
{   
    context.Configuration.ProxyCreationEnabled = false;
    ...
}
于 2012-10-04T17:50:26.907 に答える