1

我已经创建了一个 web 服务,并且正在使用 C# 和 LINQ 从我的数据库中创建我的对象。数据库中的表和对应的对象一样,相互之间有关系。

但是,在我正在访问 Web 服务的客户端中,关系消失了。这让我相信序列化有问题。为了使序列化工作,我编辑了 LINQ 对象,以便将序列化模式设置为“单向”并将关联设置为 Access => internal 在子属性而不是 public 下(否则我得到一个循环引用错误)。

所以,现在我无法访问客户端中的对象引用。有谁知道如何解决它?可以解决吗?

例如,在我的网络服务中,我不能这样写:

Recipe r = new Recipe();
r.RecipeHasCategories();

给我食谱和类别之间的关系。这在客户端不起作用!我只能访问该配方特定的属性(例如名称和描述)

帮助?

4

1 回答 1

2

Entity Framework 默认不加载相关对象;如果您执行需要关系的操作并且实体仍附加到 EF 上下文,则它将按需执行加载。

当您序列化对象时,它们会从它们的上下文中分离出来,并且这种按需加载会停止工作。您只序列化已经加载到内存中的内容。

请参阅这篇 MSDN 文章,了解如何通过该.Include()方法获取原始查询中的所有相关对象。

更新:

由于您使用的是较旧的 Linq 2 SQL 提供程序,因此没有Include方法;您只需要在执行任何查询之前通过将DeferredLoadingEnabled上下文对象设置为来禁用延迟对象加载即可。false

于 2012-04-18T14:08:45.517 回答