gpt4 book ai didi

wcf-data-services - 如何使用 WCF 数据服务加载二级实体关系?

转载 作者:行者123 更新时间:2023-12-01 11:58:24 25 4
gpt4 key购买 nike

我正在尝试使用 DataServiceQuery 查询数据库中的单个实体。我尝试加载的实体与我也想加载的其他实体的图表有关系。 MSDN 描述 herehere我可以使用 DataServiceQuery .Expand 或 DataServiceContext.LoadProperty 加载我引用的实体。

这对于我的实体的一级关系来说工作正常,但我在加载关系关系时遇到问题。

显然,我可以为所有二级关系调用 LoadProperty 并遍历所有二级集合,但我希望我可以在单个查询中立即加载整个关系图。这可能吗?

编辑

实际上加载二级关系毕竟不是那么明显。以下代码失败(为清楚起见更改了域模型):

            var context = DataServiceReference.DataServiceContextFactory.Create();
var customer = (from c in context.Customers.Expand("Orders")
where c.CustomerId.Equals(customerId)
select c).First();
foreach (var order in customer.Orders)
{
context.LoadProperty(order, "Products");

上面最后一行抛出 InvalidOperationException:“上下文当前未跟踪实体。”。我使用 self 跟踪实体。此错误可能与 STE 有关吗?

我将如何以任何方式加载二级关系?

解决方案编辑

事实证明,与 ObjectQuery .Include 相比,DataServiceQuery .Expand 使用不同的路径语法。前者使用斜杠作为路径分隔符,后者使用点。谁能解释语法不一致的原因以及在哪里可以找到扩展路径语法的文档?

最佳答案

DataServiceContextFactory 是您自己的类,对吗? (因为这不是您通常实例化 DataServiceContext 的方式)。假设它最终创建了一个普通的 DataServiceContext 实例,那么预加载多个级别的方法就是在 Expand 调用中指定多个级别。例如:context.Customers.Expand("订单/产品")将向您退还所有客户、他们的订单以及这些订单的所有产品。要使 LoadProperty 正常工作,请确保在您的 DataServiceContext 上将属性 MergeOption 设置为允许跟踪的选项之一。请注意,客户端跟踪与服务器端 EF 跟踪无关(从技术上讲,它是单独机器上的单独代码)。您可以通过尝试调用来验证上下文是否跟踪有问题的实体上下文.GetEntityDescriptor(myEntityInstance)如果它返回非空值,则上下文正在跟踪实体并且 LoadProperty 应该起作用。

关于wcf-data-services - 如何使用 WCF 数据服务加载二级实体关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3915308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com