0

我有這個問題已有2個月了RIA服務,EF和存儲過程

如何使用RIA存儲過程。

我正在使用LinqToSql和一直工作正常。

我在設計師課上做了一個課,並將它映射到SP。

現在在EF中,我看到了這個ComplexTypes我已經導入了兒子SP,並且導致了ComplexTypes。

但是在DomainDataSource中沒有出現。

好的。

但我該如何使用它們?

我只需要檢索一些數據。

我已經嘗試了所有的解決方案(清單,IList的,等等),但我得到

無法轉換類型'System.Data.Metadata.Edm.ComplexType爲鍵入「System.Data.Metadata的對象.Edm.EntityType」。 BusinessApplication2

任何解決方案,請?

回答

1

存儲過程的問題在於RIA服務工具不能「查看」存儲過程將返回的列。

因此,有很多代碼會丟失,否則會生成。

不是你正在尋找的答案,但解決方案是不使用存儲的過程。

0

我發現下面的優秀一步一步的指導,在這個網站 -

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。你可以像對待任何其他實體(映射到表的實體)類一樣對待它。