Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 4 oData和EF4-同一查询的不同结果_Entity Framework 4_Odata - Fatal编程技术网

Entity framework 4 oData和EF4-同一查询的不同结果

Entity framework 4 oData和EF4-同一查询的不同结果,entity-framework-4,odata,Entity Framework 4,Odata,我正在运行以下查询 (from txRx in TxRxes where txRx.Serial == "someSerial" select txRx).Single().TxRxModes.Count() 当我在LinqPad中使用EF4在数据库上运行这个时,我得到了正确的结果1。当我通过oData(使用相同的底层上下文)在同一数据库上运行完全相同的查询时,我得到0 为什么?单个命令强制在OData中执行前面的查询(技术上是WCF数据服务)。因此,发送到服务器的查询只是选择了具有指定序列号

我正在运行以下查询

(from txRx in TxRxes
where txRx.Serial == "someSerial"
select txRx).Single().TxRxModes.Count()
当我在LinqPad中使用EF4在数据库上运行这个时,我得到了正确的结果1。当我通过oData(使用相同的底层上下文)在同一数据库上运行完全相同的查询时,我得到0


为什么?

单个命令强制在OData中执行前面的查询(技术上是WCF数据服务)。因此,发送到服务器的查询只是选择了具有指定序列号的txRx。与EF的不同之处在于,EF将延迟加载导航属性(在您的例子中是TxRxModes),因此当您访问它来计算它时,它会工作。 WCF数据服务不执行延迟加载,因为它可能非常昂贵(对远程服务器的HTTP请求),因此TXXModes只是一个空集合。 要解决此问题,您应该能够修改代码以预加载有问题的导航属性(如此急切地加载):


请注意额外的Expand调用,它导致查询不仅从服务器中提取txRx,还从服务器中提取其所有相关TXRXMODE(在一个查询中)。

是否运行sql跟踪?实际执行的查询是否相同?
(from txRx in TxRxes.Expand("TxRxModes")
where txRx.Serial == "someSerial" 
select txRx).Single().TxRxModes.Count()