当我迭代通过ObjectStateEntries我期望[t]变量名称将是MY_ENTITY
foreach (ObjectStateEntry entry in context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted))
{
Type t = entry.Entity.GetType();
...
}
Run Code Online (Sandbox Code Playgroud)
但我是真实的
System.Data.Entity.DynamicProxies.MY_ENTITY_vgfg7s7wyd7c7vgvgv.....
Run Code Online (Sandbox Code Playgroud)
如何确定可以将当前条目转换为MY_ENTITY类型?
c# entity-framework objectstatemanager ef-code-first dbcontext
我正在使用带有POCO模板的Entity Framework 4.
我有一个List,其中MyObject是动态代理.我想使用XmlSerializer序列化此列表,但我不希望它们序列化为DynamicProxies,而是作为底层POCO对象.
我知道ContextOptions.ProxyCreationEnabled,但我不想使用它.我只是想知道如何将代理对象转换为它的POCO序列化.
我正在尝试序列化域模型并遇到一个需要将动态代理转换为POCO的问题.我遇到的问题是通过模型中的虚拟属性存在循环引用.虽然我试图使用[ScriptIgnore]序列化程序不解析这些属性,但它仍然可以.我相信这是因为对象是动态代理,并且属性中仍然存在一些导致解析器进入的残余(这反过来导致递归错误"循环引用" - 我尝试将递归限制为3步但我得到了错误"超出递归步骤").
如何将对象从动态代理转换为POCO以便可以序列化?
编辑:简单的例子
public class One : BaseViewModel
{
public int OneId { get; set; }
public virtual ICollection<Two> Two { get; set; }
}
public class Two
{
public int TwoId { get; set; }
public int OneId { get; set; }
[ScriptIgnore]
public virtual One One { get; set; }
}
public abstract class BaseViewModel
{
public string AsJson()
{
var serializer = new JavaScriptSerializer();
return serializer.Serialize(this);
}
}
Run Code Online (Sandbox Code Playgroud) c# serialization dynamic-proxy entity-framework-4.1 asp.net-mvc-3