我有一个有很多虚拟属性延迟加载的类
public class TestPlan
{
public virtual ICollection<Test> Test { get; set; }
public virtual Commercial Commercial { get; set; }
...
}
此类必须稍后在程序中序列化。问题是,因为这些属性是虚拟的,每次我尝试序列化时都会出现错误(循环引用)。 现在这是我的问题:
我的老板告诉我使用他所谓的View Object,它是同一个对象但没有未使用的属性。你怎么看待这个?我应该将这些未使用的属性设置为null还是什么?
背景:
序列化对象旨在用于infragistics网格(一个很好的数组)。我已经尝试在我的虚拟机上使用[ScriptIgnore]
属性,但它没有用。
我也尝试将我的TestPlans检索为database.TestPlans.AsNoTracking().ToList()
但是出现错误(当使用NoTracking合并选项返回一个对象时,只能在EntityCollection或EntityReference不包含对象时调用Load。)
提前致谢
答案 0 :(得分:1)
如果您的Boss意味着带有View Object的DataTransferObject,他似乎正朝着正确的方向前进。 这有时在ASP中也称为ViewModel对象。 这只是一个简单的POCO,表示模型对象的扁平版本(有些使用AutoMapper进行展平)
您不应修改模型对象,而是创建一个新对象(可能是扁平化的)以进行序列化。此对象不仅仅是数据行为,而是表示序列化的合同。
我无法从您的示例代码中看到循环引用,但如果您需要,我可能会给您一个不相关的代码示例,该示例演示如何通过展平来解析循环引用。 (很难不知道模型)