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

本文关键字:代理 System 是否 Data Entity DynamicProxies | 更新日期: 2023-09-27 18:02:17

可能重复:
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;

原因是我想从这个对象中删除所有实体框架跟踪等,并将其纯(POCO(属性存储在缓存中。我需要能够为所有100个左右的Entity类做到这一点,所以它必须是相当通用的——而不需要为每个属性手动说object1.foo=object2.foo。

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

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

我对这个结果很感兴趣,因为这个NuGet包还使用通用存储库模式和memcached来解决相同的缓存技术,并且在反序列化数据时,您的问题似乎也是一样的。