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;

这样做的原因是我想从此对象中删除所有实体框架跟踪等,并将其普通(POCO)属性存储在缓存中。而且我需要能够为所有 100 个左右的 Entity 类执行此操作,因此它必须是相当通用的 - 无需为每个属性手动说 object1.foo = object2.foo。

4

1 回答 1

1

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

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

于 2011-08-11T20:29:36.933 回答