7

重複の可能性:
EF4は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程度のエンティティクラスすべてに対してこれを実行できる必要があるため、すべてのプロパティに対して手動でobject1.foo = object2.fooと言わずに、かなり一般的である必要があります。

4

1 に答える 1

1

たぶん、この記事は役に立ちます。データを複製するためのいくつかの方法について説明します。これらのメソッドを使用して、タイプ A のオブジェクトをタイプ B のオブジェクトに変換できるかどうかはわかりませんが、試してみる価値は間違いありません。

このNuGetパッケージも汎用リポジトリパターンとmemcachedを使用して同じキャッシュ技術に対処しており、データを逆シリアル化するときに問題が同じであるように見えるため、この結果に非常に興味があります.

于 2011-08-11T20:29:36.933 に答える