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

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

<分区>

Possible Duplicate:
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 个左右的实体类执行此操作,因此它必须具有合理的通用性——无需手动为每个属性指定 object1.foo = object2.foo。

最佳答案

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

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

关于C# 将 System.Data.Entity.DynamicProxies 克隆到实际(非代理)类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6691999/

相关文章:

sql-server - 将 SQL Server 命名参数与 ExecuteStoreQuery 和 ExecuteStoreCommand 结合使用

c# - SQL Server CE 架构

C++ 网络库需要内核堆栈

c# - Elasticsearch - 排序搜索结果 ASC

c# - 命名空间 'Numerics' 中不存在类型或命名空间名称 'System'

c# - 当 SQL Azure 中不存在数据库时,是否需要先迁移 EF 代码?

.net - 使用具有 POCO 支持的 Entity Framework 4 实现 propertychanged 事件的最罕见和最有效的方法是什么?

c# - Entity Framework POCO - 如果字段更新两次,如何防止错误?

c# - MSFT_NetAdapter 类无效

c# - 如果已经打开,请关闭 Telerik Radgrid Editform