2011-07-14 23 views
6

可能性の重複:
EF4 Cast DynamicProxies to underlying objectC#System.Data.Entity.DynamicProxiesを実際の(プロキシではない)クラスにクローンしますか?

私はそれが実際のクラスだにSystem.Data.Entity.DynamicProxiesのクローンを作成または変換する方法を把握しようとしています。例:

System.Data.Entity.DynamicProxies.Currency_F4008E27DE_etc is the proxy class 
MyApp.Entities.Currency is the real class 

MyApp.EntitiesのクラスのすべてがBaseEntityから継承するので、私はそこの変換を実行しようとしました。その後、

public abstract partial class BaseEntity 
{ 
    public T ShallowCopy<T>() where T : BaseEntity 
    { 
     return this.MemberwiseClone() as T; 
    } 
    // other BaseEntity properties not relevent here 
} 

と実際のクラスにDynamicProxiesを変換:

// this returns a DynamicProxies class 
Currency currency = LookupDefaultCurrency(); 
// this one needs to return a Entities.Currency class 
// (but currently returns a DynamicProxies class too 
Currency pocoCurrency = (Currency)currency.ShallowCopy<Currency>(); 
HttpRuntime.Cache[key] = pocoCurrency; 

この理由は、このオブジェクトからすべてのEntity Frameworkトラッキングなどを削除し、プレーン(POCO)プロパティをキャッシュに保存するだけだからです。そして、私は100以上のEntityクラスすべてでこれを行うことができる必要があります。したがって、合理的に汎用的でなければなりません。手動でobject1.foo = object2.fooを各プロパティごとに指定する必要はありません。

+0

なぜ以前の質問で質問したようにプロキシの生成をオフにしなかったのですか? –

+0

それは私が必要なものではないことが分かります。私は大部分の時間のためにプロキシ(すべての追跡など)が必要です。しかし、後で読み取り専用のキャッシュを使用する場合は、非プロキシオブジェクトである必要があります。http://stackoverflow.com/questions/6688772/c-entity-framework-using-only-one-objectcontext-per-httpcontext –

+0

いくつかのコンテキストインスタンスまたはクエリに対してもプロキシ作成を選択的にオフにすることができます。したがって、Imhoでは、通貨を読み込むためにのみプロキシをオフにしても問題ありません。 –

答えて

1

this articleが役に立ちます。データを複製するいくつかの方法について説明します。これらのメソッドを使用して、タイプAのオブジェクトをタイプBのオブジェクトに変換できるかどうかはわかりませんが、試してみる価値はあります。 this NuGet packageは一般的なリポジトリパターンを使用し、memcachedも同じキャッシング手法を扱うため、データをデシリアライズするときに問題が同じように見えるので、この結果に非常に興味があります。

+1

@JK私のプロジェクトでは同じ問題があるので、どのメソッドを使って作ったのか、興味がありますか? – erikvda

関連する問題