83

私の WCF サービスがコード ファースト モデルからクラスを返すことができる唯一の方法は、以下のコードProxyCreationEnablefalse使用して を に設定することです。

((IObjectContextAdapter)MyDb).ObjectContext.ContextOptions.ProxyCreationEnable = false;

これを行うことのマイナスの結果は何ですか?利点の 1 つは、少なくともこれらの動的な型をシリアル化して、WCF を使用してネットワーク経由で送信できることです。

4

4 に答える 4

71

動的プロキシは、変更の追跡と遅延読み込みに使用されます。WCFがオブジェクトをシリアル化しようとすると、通常、関連するコンテキストは閉じられて破棄されますが、ナビゲーションプロパティのシリアル化により、(閉じられたコンテキストで)遅延読み込みが自動的にトリガーされます=>例外。

遅延読み込みをオフにする場合は、使用するすべてのナビゲーションプロパティ(ObjectQueryに含める)に積極的な読み込みを使用する必要があります。変更の追跡はWCFでは機能せず、ObjectContextにアタッチされているエンティティの変更に対してのみ機能します。

于 2011-01-04T18:01:29.957 に答える
10

EF を使用すると、デフォルトでクラスのプロキシが作成されます。解決策は、DbContext クラスのコンストラクターにこの行を追加することです。データ モデルは DbContext クラスから継承されるため、次のようにモデルを編集できます。

    public yourDataModelEntities()
        : base("name=yourDataModelEntities")
    {
        base.Configuration.ProxyCreationEnabled = false;
    }

このクラスはあなたのEF.edmx時代にありyourmodel.Context.ttますyourmodel.Context.cs

于 2014-01-17T21:18:46.537 に答える