我正在使用RIA服務與Silverlight和實體框架。我想調用存儲過程並將結果映射到數據網格。做這個的最好方式是什麼?存儲過程的輸出不映射到任何表設計。RIA服務 - 調用存儲過程
我發現下面的文章 -
但是,它並沒有爲我工作 - 我得到一個錯誤說,結果一套複雜沒有定義主鍵。我看不出如何在代碼中定義它。
無論如何,我願意接受任何解決方案。
我正在使用RIA服務與Silverlight和實體框架。我想調用存儲過程並將結果映射到數據網格。做這個的最好方式是什麼?存儲過程的輸出不映射到任何表設計。RIA服務 - 調用存儲過程
我發現下面的文章 -
但是,它並沒有爲我工作 - 我得到一個錯誤說,結果一套複雜沒有定義主鍵。我看不出如何在代碼中定義它。
無論如何,我願意接受任何解決方案。
我發現在這個網站如下優良一步一步的指導 -
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。你可以像對待任何其他實體(映射到表的實體)類一樣對待它。
嗯,我想出瞭如何去做,雖然有點麻煩。您需要爲域元數據文件中的結果集創建元數據類。之後,RIA將基本上像對待實體一樣對待它。
全部細節可以在這裏找到 - http://leeontech.wordpress.com/2010/05/24/ria-services-and-storedprocedures/
更改生成的文件看起來像瘋了一樣。你在[重點] – alerya 2013-02-21 07:51:25