2010-09-22 113 views
0

如果一個項目已經將POCO用於實體並使用了實體框架並使用延遲加載,那麼您將有一個「不完整」的對象圖形通過網絡返回。因此,當客戶使用實體時,是否有某種代理會自動加載剩餘的值?我們是否必須自己創建這個代理並將原始實體包裹在其中?或者是否有一種可接受的模式來識別延遲加載類型,然後通知客戶端再次調用WCF?延遲加載的POCO實體,實體框架和WCF如何一起工作?

回答

1

使用扁平DTO,您可能不希望將您的完整域公開給客戶端。 WCF是基於消息的,而不是域驅動的。

2

延遲加載與WCF往往不能奏效,因爲你的方法是這樣的:

public List<MyPoco> GetData() 
{ 
    using (var context = new MyObjectContext()) 
    { 
    return context.MyPocos.ToList(); 
    } 
} 

正如你看到上下文中的方法(你必須從某個地方關閉上下文)關閉。但是當列表序列化時,它會嘗試延遲加載相關對象= >異常,因爲上下文已關閉。在WCF中,您應該使用預先加載。

+0

...即使上下文沒有關閉,它仍然*是一個壞主意。延遲加載對於分佈式對象來說過於瑣碎。 – 2010-09-22 12:49:57

+0

我們遇到的問題是,我們有一些包含數千個訂單項的帳戶。除非有人提出要求,否則我們不希望通過網絡將其序列化。 – uriDium 2010-09-22 13:20:51

+0

所以你需要兩個操作。一個包含項目,另一個包含項目 – 2010-09-22 13:25:38