0

EF4.3 で使用している正規化されたデータベースがあります。

この例では、ユーザーがいます (全員がユーザーです)。一部はサブスクライバーであり、サブスクライバーは寄稿者、メンバー、または管理者のいずれかです。

そのため、ユーザーのタイプごとに、ナビゲーション プロパティを介して適切な関連付けを含めます。

したがって、Member linq ステートメントは次のようになります。

            var u = r.FindBy(x => x.UserId == userId)
                .Include("Subscribers")
                .Include("Members")
                .SingleOrDefault();

オブジェクトに関しては、すべての人がユーザーです - 順列が異なるだけです。

一部のナビゲーション プロパティが含まれていない場合に、コードでこれを処理する最善の方法を見つけようとしています。たとえば、上記の例では Contributor や Administrator を含めません。通常、user.subscriber.contributor が NULL でないことを確認できますが、代わりに、このチェックを行っても「オブジェクト コンテキストが破棄されました...」と表示されます。

これを回避するにはどうすればよいですか?

4

1 に答える 1

0

エンティティが遅延読み込み用にプロキシされており、コンテキストを破棄する前にエンティティが正しく切り離されなかったため、例外が発生しています。リレーションがロードされたエンティティを直接切り離すことはできません (代わりにシリアライズを通じてディープ コピーを作成する必要があります)。この場合の最善の解決策は、遅延ロードをオフにすることです。このような場合、エンティティは、初めてアクセスされるナビゲーション プロパティを遅延ロードしようとしません。

objectContext.ContextOptions.LazyLoadingEnabled = false;

代わりに、プロキシの作成全体をオフにすることもできます。

objectContext.ContextOptions.ProxyCreationEnabled = false;
于 2012-08-15T10:34:43.403 に答える