的OData问题与EF

问题描述:

事情虚拟财产是,我有一个OData服务使用默认配置:的OData问题与EF

public class Service : DataService<SummumnetFilterContext> 
    { 
     // This method is called only once to initialize service-wide policies. 
     public static void InitializeService(DataServiceConfiguration config) 
     { 

      config.SetEntitySetAccessRule("*", EntitySetRights.All); 
      config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; 

     } 
     protected override SummumnetFilterContext CreateDataSource() 
     { 
      var dataSource = new SummumnetFilterContext(); 
      dataSource.Configuration.ProxyCreationEnabled = false; 
      return dataSource; 
     } 
    } 

而与此结构的情侣对表:

public class LabTest 
    { 
     public int ID { get; set; } 
     public DateTime ApplicationDate { get; set; } 
     public DateTime ReportDate { get; set; } 

     public virtual List<LabValue> LabValue { get; set; } 
    } 
public class LabValue 
    { 
     [Required] 
     public int ID { get; set; } 
     public string Value { get; set; } 
     public string Units { get; set; } 

     public int LabTestID { get; set; } 
     public virtual LabTest LabTest { get; set; } 
    } 

事情是,当我试图检索任何LabTest时,使用它的LabValue,使用Odata List<LabValue> LabValues每次都是空的,而不是null,但是为空。谁能帮我这个?。在我的服务中使用EF课程。

+0

当您关闭LazyLoading时,您必须手动加载每个导航属性,您是否在代码中的任何位置执行此操作? – 2012-02-03 21:14:31

+0

@Piotr Auguscik,通过在列表属性上执行ForEach,我手动加载或不加载? – 2012-02-03 21:31:40

+0

依赖EF verison,你必须使用特殊的函数来加载像'Include'或'entry.Collection(r => r.SomeCollection).Load()'这样的属性。使用foreach,如果触发'lazyloading',则触发它。 – 2012-02-03 21:36:30

我想你正在使用WCF数据服务来消耗你的OData提要。在这种情况下you must tell the service,你希望你的关系,将与主要的实体加载:

var data = dataServiceContext.LabTests.Expand("LabValues").FirstOrDefault(); 

如果通过URL手动调用数据服务,你必须使用expand query option

要说清楚 - 服务没有透明的延迟加载。延迟加载是当您直接使用当前EF上下文范围中同一层上的实体时使用的EF功能。当您使用OData Feed时,您很可能不在同一层(甚至是机器)上,并且不提供透明的延迟加载以避免额外的网络往返服务。

+0

太棒了,我必须首先获取我需要的对象,然后告诉服务加载属性,第一个链接是您提供的非常有用的,Thanxs Ladislav。 – 2012-02-06 16:15:34

+1

如果您使用扩展,您告诉服务返回您的对象和它的关系在一次往返。 – 2012-02-06 17:46:16