2010-04-15 150 views
0

隨着EF 4.0的發佈,對SQL服務器的更多支持存儲過程。 可以自動爲SP的結果數據集生成複雜類型。 但複雜的類型不支持Ria Service。關於SP和EF&Ria服務的解決方案

當我嘗試使用與EF 4.0結合的ria服務時,我想通過SP獲取數據集。這個結果沒有映射到任何實體/表。

社區建議的一些修正如下: 1.創建視圖來映射sp結果。 (但對於EF,如果沒有ID或主要的,不能映射到任何實體) 2.創建實體來映射SP結果(爲此,甚至需要爲CRUD映射SP,即使我沒有需要CUD關於此sp結果)

上面的解決方案也不能自動化。由於數據庫對象可能隨時間而改變,自動更新edm將失去解決方案。

那麼有什麼解決方案?我希望儘可能將數據操作返回到數據庫,以便可以在數據庫中完成許多更改,而不需要重新生成.net程序集(這會導致重新部署)。

回答

0

我們在開發中遇到同樣的問題多次出現。我們選擇實施的工作是帶有POCO的WCF RIA服務(普通舊CLR對象)。

使用POCO的我們可以實現一個域服務,通過我們手工創建的對象與客戶端進行通信。這使我們可以通過服務器上的任何技術(EF或任何其他技術)訪問數據庫,從而允許我們使用存儲過程並在客戶端上使用RIA。

當然,這個過程爲系統增添了一個時髦的步驟。您必須將您的POCO維護到您的數據庫的存儲過程。

簡單的例子:

[EnableClientAccess()] 
public class FooBarService : LinqToEntitiesDomainService<MyDBEntities> 
{ 
    public IQueryable<FooBar> GetFooBar() 
    { 
     var qry = from FooBarSPs in this.ObjectContext.FooBarSPs 
       orderby FooBarSPs.Name 
       select new FooBar 
       { 
        ID = FooBarSPs.ID, 
        Name = FooBarSPs.Name 
       }; 
     return qry; 
    } 
} 

如果必須使用WCF RIA服務,你想聊到一個存儲過程,使用POCO對象作爲使者是我見過的最簡單的方法,來做到這一點。

我推薦去年在Mix 09上看Brad Brad的演講: http://videos.visitmix.com/MIX09/T40F