如果没有分离,C#Entity Framework延迟加载

时间:2011-05-28 02:47:46

标签: c# entity-framework lazy-loading datacontractserializer

我正在尝试对我的EntityFramework OnSave中的每个对象执行一些处理。此过程的一部分涉及将对象转换为二进制对象。由于我们在EntityFramework上使用了延迟加载,并且它正在抓取在PartialClasses中访问的Lazy Loaded对象,因此它需要FOREVER进行序列化并且我大约99%肯定。

我尝试从ObjectContext中分离我的对象,但是我的同事在我们的应用程序中使用了Lazy Loading,而没有先检查对象是否为NULL。

例如,我们的Partial Classes文件中有这样的代码:
get { return this.ContactsTable.FullName; }
只要对象不是Detached,它就可以正常工作。一旦它被分离,我得到Null引用错误。

我的问题是:我是否可以分离我的对象并使Lazy Loading不抛出Null Reference异常,或者我可以告诉DataContractSerializer忽略Lazy Loaded对象吗?

1 个答案:

答案 0 :(得分:4)

  

我有可能分开我的   对象并且懒惰加载而不是抛出   空引用异常

没有

  

我可以告诉你   DataContractSerializer忽略Lazy   加载的对象

没有

但应该有简单的解决方案。当您去序列化实体时,请在附加实体的上下文中调用它:

// Turn off the lazy loading
context.ContextOptions.LazyLoadingEnabled = false;
// Run your serialization here
...
// Turn on the lazy loading again
context.ContextOptions.LazyLoadingEnabled = true;

但它完全非常奇怪,因为序列化将尝试序列化所有已加载的实体,并且根据您的描述,您似乎永远不知道对象图的大部分将被序列化。

如果你真的只想保存单个对象,那么分离是可行的,但它会破坏与其他对象的所有关系。