C#克隆System.Data.Entity.DynamicProxies到实际(非代理)类?

时间:2011-07-14 10:47:37

标签: c# entity-framework poco dynamic-proxy cloning

  

可能重复:
  EF4 Cast DynamicProxies to underlying object

我正在试图弄清楚如何将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。

1 个答案:

答案 0 :(得分:1)

也许this article很有帮助。它讨论了几种克隆数据的方法。我不确定这些方法是否可用于将类型A的对象转换为类型B的对象。但它绝对值得一试。

我对此结果非常感兴趣,因为this NuGet package也使用通用存储库模式和memcached来解决相同的缓存技术,并且在反序列化数据时你的问题似乎相同。