首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >EF4将DynamicProxies强制转换为基础对象

EF4将DynamicProxies强制转换为基础对象
EN

Stack Overflow用户
提问于 2011-01-10 05:07:31
回答 4查看 9.9K关注 0票数 18

我正在使用Entity Framework4和POCO模板。

我有一个MyObject是动态代理的列表。我想使用XmlSerializer来序列化这个列表,但是我不想将它们序列化为DynamicProxies,而是作为底层的POCO对象。

我知道ContextOptions.ProxyCreationEnabled,但我不想用它。我只想知道如何将代理对象转换为它的底层POCO以进行序列化。

EN

回答 4

Stack Overflow用户

发布于 2012-01-23 23:17:01

今天面临着同样的问题,并使用Value Injecter解决了它。它就像这样简单:

var dynamicProxyMember = _repository.FindOne<Member>(m=>m.Id = 1);
var member = new Member().InjectFrom(dynamicProxyMember) as Member;
票数 7
EN

Stack Overflow用户

发布于 2013-05-22 12:15:51

我将通过提供一个对我有帮助的解决方案来挖掘这些老骨头。希望它能对阅读它的人有所帮助。

因此,实际上有两种解决方案。如果你不想要延迟加载,你可以随时关闭动态代理,这将只给你一个整体:

public class MyContext : DbContext
{
    public MyContext()
    {
        this.Configuration.ProxyCreationEnabled = false
    }

    public DbSet<NiceCat> NiceCats {get; set;}
    public DbSet<CrazyCat> CrazyCats {get; set;}
    public DbSet<MeanCat> MeanCats {get; set;}

}

另一种解决方案是使用ObjectContext来获取代理所代表的原始实体类型:

using (var db = new MyContext())
{
    var meanAssCat = context.MeanCats.Find(CurrentCat.Id)
    var entityType = ObjectContext.GetObjectType(meanAssCat.GetType());
}
票数 2
EN

Stack Overflow用户

发布于 2011-11-13 19:29:03

因为您不想关闭ProxyCreation,所以无论在何处为对象属性放置DynamicProxy关键字(EF上下文继承您的对象并用DynamicProxy对象替换虚拟属性),您都会被虚拟对象卡住。这些DynamicProxy对象不是从POCO实体继承的,它们只是具有相同的属性,可以用来代替您的POCO。如果你真的必须转换到POCO对象(我不相信有人会想出一个转换它的方法),你可以尝试通过编写复制构造函数来解决这个问题,它将从传递的参数中复制所有属性(从性能的角度来看,这不是很聪明,但你必须做的是,你必须做的是),或者在包含动态代理的父对象中使用System.Xml.Serialization.XmlTypeAttribute,而不是poco来告诉序列化程序如何序列化虚拟属性(到哪种类型)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4641795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档