我正在尝试序列化一个实体及其所有相关实体,以便在物理删除实体之前存储为xml(留下审计跟踪)。
我正在使用DataContractSerializer
,这似乎是在使用XmlSerializer
时执行的浅层序列化。
唯一的麻烦是只有已加载的相关实体才会被序列化。
我已经尝试创建一个辅助函数,该函数将接受任何实体并迭代其属性以查找要加载的相关实体,但是它在EntityCollection
属性上失败,因为我无法将它们转换为{{1 }}。我试图使用EntityCollection<EntityObject>
因为我认为多态性会帮助我,但是属性不会抱怨它是一种不同的类型。
有什么想法吗?
EntityObject
答案 0 :(得分:0)
我找到了一个能够达到我想要的解决方案:
else if (p.PropertyType.IsGenericType && p.PropertyType.GetGenericTypeDefinition() == typeof(EntityCollection<>))
{
IEnumerable pEnum = (IEnumerable)p.GetValue(entity, null);
IRelatedEnd pEnd = (IRelatedEnd)p.GetValue(entity, null);
pEnd.Load();
// Load child entities
IEnumerator eEnum = pEnum.GetEnumerator();
while (eEnum.MoveNext())
{
LoadAllRelatedEntities((EntityObject)eEnum.Current, ref processed);
}
}
我还需要将processed
param更改为ref,以便它按要求运行:
LoadAllRelatedEntities(EntityObject entity, ref List<EntityKey> processed)
在我的情况下,我还必须添加一些过滤到我将加载的实体,因为在我的情况下很多是在链中的某个地方进行自引用,因此导致无限循环。