我已经创建了一个Web服务,并且正在使用C#和LINQ从我的数据库创建我的对象。数据库中的表与对应的对象具有相互关系。
然而,在我的客户端访问Web服务时,关系消失了。这让我相信序列化有问题。为了使序列化工作,我编辑了LINQ对象,使序列化模式为“单向”并更改了关联设置为Access =>内部属于子属性而不是公共(否则我得到循环引用错误)。
所以,现在我无法访问客户端中的对象引用。有谁知道如何解决它?它可以解决吗?
例如,在我的网络服务中我写不出来:
Recipe r = new Recipe();
r.RecipeHasCategories();
给我食谱和类别之间的关系。这在客户端不起作用!我可以访问的是该配方特有的属性(例如名称和描述)
帮助?
答案 0 :(得分:2)
默认情况下,实体框架不会加载相关对象;如果您执行需要关系的操作并且实体仍然附加到EF上下文,那么它将按需执行加载。
序列化对象时,它们将与其上下文分离,并且此按需加载将停止工作。您只序列化已加载到内存中的内容。
有关如何通过.Include()
方法获取原始查询中的所有相关对象,请参阅this MSDN article。
更新:
由于您使用的是较旧的Linq 2 SQL提供程序,因此不会有Include
方法;您只需要在执行任何查询之前通过在上下文对象上将DeferredLoadingEnabled
设置为false
来禁用已完成的延迟对象加载。