2009-06-12 82 views
2

這個問題是另一個問題的延伸,但我認爲它保證自己的線程。請參閱See Silverlight Question動態數據與實體框架和RIA服務

我有一個存儲過程(SQL 2005),每次調用它時都會返回一個動態數據集(不同的列/模式)。

我想在Silverlight 3.0中使用這個,所以我需要以某種方式使用實體框架和RIA服務來連接它。我也需要這是Bindable(Silverlight網格),所以我需要這些動態列可以通過屬性(網格限制)訪問。有任何想法嗎?

回答

2

在實體框架的當前出貨版本中,您可以映射的唯一類型的存儲過程是那些返回實體類型的存儲過程。通常在編譯之前就完成了映射,儘管在運行時至少理論上可能生成實體框架元數據。

因此,我看到了幾個選擇。

  1. 放棄使用不返回已定義模式的過程的整個想法。在編譯之前,您將永遠無法映射這樣的過程。
  2. 動態生成EDMX在運行時爲了在調用之前將實體類型映射到過程的預期輸出列。請注意,實體框架的當前版本對程序返回的列有點挑剔;你可以在MSDN上找到關於這個的文檔。
  3. 在.NET 4.0中,有new features which allow you to inform the Entity Framework about your client schema at runtime without having to generate EDMX first。您可能能夠利用這些功能來將某些實體類型映射到過程的預期輸出列。
  4. 同樣,在.NET 4.0中,可能會支持返回標量值的特效。我不記得這是否是這種情況。
  5. 您可以始終從實體連接獲取標準數據庫連接,並使用常規SqlCommands直接執行該過程。不幸的是,這使得您的代碼數據庫提供程序特定,但它可能是解決您的問題最簡單的方法。事實上,完全使用這樣的過程已經是數據庫服務器特定的。
+1

+1感謝系列文章。 .NET 4.0確實不是一種選擇。我傾向於#1,但到目前爲止,我無法想到另一種選擇(請參閱我的相關問題)。如果我選擇#5,這些列是否可以通過屬性獲得。如果正確理解Silverlight數據網格文檔,則只能將列綁定到屬性。 – 2009-06-13 01:18:04

0

您可以使用一個WCF Web服務wraper爲accesing您的SP和使用WCF服務作爲數據源布拉德·艾布拉姆斯有辦法做到這一點談了他對RIA服務