首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架与DataContractSerializer

实体框架与DataContractSerializer
EN

Stack Overflow用户
提问于 2011-08-12 08:52:02
回答 3查看 1.6K关注 0票数 3

我一直在阅读关于实体框架上下文中的实体图序列化的文章,使用Linq到实体和不同的可能的序列化程序:二进制、XmlSerializer和DataContractSerializer。正如我所理解的那样,二进制和XmlSerializer在没有关系的情况下序列化实体。在关系序列化的情况下,由于结果的xml文件结构(对于XmlSerializer)的性质,这将导致问题。除非禁用延迟加载,否则DataContractSerializer会序列化整个图的深度。

,我的问题是:我想序列化图的一部分。例如,如果我有一个实体A和三个相关实体B、C和D,那么只有B和D将被A序列化,我想使用DataContractSerializer。如果我删除不想要的导航属性的DataMemberAttribute,这会起作用吗?

EN

回答 3

Stack Overflow用户

发布于 2011-08-12 14:44:06

实际上,您可以禁用延迟加载、序列化/反序列化,然后重新启用延迟加载。

context.ContextOptions.LazyLoadingEnabled = false;

StackOverflow Source

票数 1
EN

Stack Overflow用户

发布于 2011-08-12 09:55:25

因为属性是静态元数据,所以不能在运行时处理它们。如果你将它们从实体中移除,它们将被永久地移除。

延迟加载可能不是您想要的,因为当您加载整个图时,部分图通常只出现在更新或部分插入上。

从我收集到的情况来看,当您想要更新某项内容时,您只想更新部分图,而不是更新客户端上的整个图。实现这一目标的一种方法是移除另一个DataMembers,并将它们设置为null,序列化它们,更新它们,并修复您以前设置的空引用,最后确保ChangeTrackers都处于以前的状态。

在我们的特定开发过程中,我们通过一个T4模板实现了这种行为,该模板生成所有杂乱的代码,生成"DataManager“的一部分,一旦它们存在于客户端上,就会处理所有的自跟踪实体。

票数 0
EN

Stack Overflow用户

发布于 2014-01-18 00:08:29

根据我的经验,禁用延迟加载的唯一可靠方法是转到实体设计器(),在后台右键单击,选择" Properties ",并在Properties窗口中将“Loading”设置为false。

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

https://stackoverflow.com/questions/7037734

复制
相关文章

相似问题

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