2014-03-19 79 views
1

我將我們的WCF Web服務遷移到ServiceStack。根據我們有3個實體。讓他們爲A,B和CServiceStack和實體框架Lazy Loading

  • A是B的父親
  • A是C.
  • 的父親

在WCF中,我們將有3種方法來獲取與他的孩子:

public List<A> GetAWithBIncluded() 
{ 
    return Repository.A.Include("B").ToList(); 
} 

public List<A> GetAWithCIncluded() 
{ 
    return Repository.A.Include("C").ToList(); 
} 

public List<A> GetAWithBAndCIncluded() 
{ 
    return Repository.A.Include("B").Include("C").ToList(); 
} 

我很難將此過程轉換爲ServiceStack方式。你們能提供一些例子嗎?

我想出的最好的是:

public class AResponse 
{ 
    public List<A> As {get;set;} 
    ....//One list of each type. 
} 

我們知道我們不能用惰性加載使用WCF,但可以ServiceStack和ormlite做的數據存取完全自動化的過程的伎倆,而不濫的應用程序?

回答

2

如果你使用EF,我可能會做這樣的事情:

[Route("/a")] 
public class GetAs : IReturn<List<A>> 
{ 
    public bool IncludeB { get; set; } 
    public bool IncludeC { get; set; } 
} 

public class AService : Service 
{ 
    private readonly AContext _aContext; 

    public AService(AContext aContext) 
    { 
     _aContext = aContext; 
    } 

    public object Get(GetAs req) 
    { 
     var res = _aContext.As; 

     if (req.IncludeB) 
      res = res.Include("B"); 

     if (req.IncludeC) 
      res = res.Include("C"); 

     return res.ToList(); 
    } 
} 
+0

非常有趣的你的方法,我將離開開放的,現在看到更多的例子。 – Guardian

+1

當然!看看其他人是否回答,他們會如何接近它,這很有趣! :) – CallumVass