2010-09-21 38 views
2

我正在使用RIA服務與Silverlight和實體框架。我想調用存儲過程並將結果映射到數據網格。做這個的最好方式是什麼?存儲過程的輸出不映射到任何表設計。RIA服務 - 調用存儲過程

我發現下面的文章 -

http://blogs.msdn.com/b/tom/archive/2009/05/07/silverlight-ria-calling-stored-procedures-that-don-t-return-tables.aspx

但是,它並沒有爲我工作 - 我得到一個錯誤說,結果一套複雜沒有定義主鍵。我看不出如何在代碼中定義它。

無論如何,我願意接受任何解決方案。

回答

3

我發現在這個網站如下優良一步一步的指導 -

http://betaforums.silverlight.net/forums/p/218383/521023.aspx

1)添加一個ADO實體數據模型到您的Web項目;選擇從數據庫選項生成;選擇要連接的數據庫實例。

2)選擇您的數據庫對象導入到模型。您可以展開「表格」節點以選擇要導入到模型的任何表格。展開存儲過程節點以選擇您的存儲過程。單擊完成以完成導入。

3)右鍵單擊數據庫模型設計器以選擇添加/功能導入。給函數一個名字(和SP相同的名字就可以),然後選擇你想要映射的存儲過程。如果您的SP只返回一個字段,則可以將返回結果映射到一組標量。如果SP返回多個字段,則可以將返回結果映射到集合或實體(如果所有字段來自單個表)或複雜類型的集合。

如果您想使用複雜類型,您可以單擊獲取列按鈕來獲取您的SP的所有列。然後點擊創建新的複雜類型按鈕來創建這個複雜類型。

4)將域服務類添加到Web項目。選擇您剛創建的DataModel作爲此服務的DataContext。選擇你想要暴露給客戶的所有entitis。應爲這些實體生成服務功能。

5)您可能看不到實體列表中的複雜類型。您必須在您的服務中爲您的SP手工添加查詢功能: 假設您的SP稱爲SP1,則您生成的複雜類型稱爲SP1_Result。

添加以下代碼在你的域服務類:

public IQueryable<SP1_Result> SP1() 
    { 
     return this.ObjectContext.SP1().AsQueryable();    
    } 

現在你可以編譯您的項目。你可能會得到這樣的錯誤:「SP1_Result沒有密鑰」(如果你不在RIA服務SP1測試版)。如果你這樣做,你需要做以下的服務元數據文件:

增加了SP1_Result元數據類和標籤的關鍵領域:

[MetadataTypeAttribute(typeof(SP1_Result.SP1_ResultMetadata))] 
public partial class SP1_Result 
{ 
    internal sealed class SP1_ResultMetadata 
    { 
     [Key] 
     public int MyId; // Change MyId to the ID field of your SP_Result 
    } 
} 

6)編譯您的解決方案。現在,您已將SP1_Result暴露給客戶端。檢查生成的文件,你應該看到SP1_Result是作爲實體類生成的。現在,您可以訪問Silverlight代碼中的DomainContext.SP1Query和DomainContext.SP1_Results。你可以像對待任何其他實體(映射到表的實體)類一樣對待它。

+0

更改生成的文件看起來像瘋了一樣。你在[重點] – alerya 2013-02-21 07:51:25