2010-07-13 59 views
0

我們對我們的數據庫層使用ado.net實體框架4.0,並且我是ado.net實體框架的新手。我通過在實體框架中添加實體來創建實體。我想用存儲過程映射該實體而不是數據庫的表。存儲過程將返回與實體相同的列。怎麼可能以及如何在沒有映射到表格的情況下做到這一點?ADO.NET Ef4-如何將實體映射到存儲過程而無需映射到表

回答

1
+0

我只想將實體與存儲過程綁定,而不是與數據庫表綁定。你提出的步行雖然沒有說明這一點。 – 2010-07-14 06:00:35

+0

如果你只想通過存儲過程檢索實體:http://msdn.microsoft.com/en-us/library/cc716672.aspx – 2010-07-14 06:13:41

1

它不是可能的,因爲對象集是一個IQueryable和映射的對象集存儲過程不會給ü一個IQueryable因爲其本身的性質存儲過程不能組成。您可以做的最好的方法是將存儲過程內的內容放入視圖並將視圖映射到可能的ObjectSet。

+0

linq-to-sql有可能爲什麼它不可能與實體框架?我已經用Linq做了很多次。 – 2010-07-15 09:22:18

+0

我在說什麼,我不希望一個實體綁定表。我想使用這個實體作爲我的存儲過程select語句的結果,例如select product,產品的productname,並且會有一個prouct類,它將擁有這些property。但我不想將產品綁定到產品表,我只是想將其與存儲過程綁定。 – 2010-07-19 10:27:07

+0

好的放心,它不被支持。有關於這個問題的內部辯論,但我不確定這是否會在不久的將來得到支持。 – zeeshanhirani 2010-07-19 13:53:20

0

您需要創建一個複雜類型,而不是實體。打開模型瀏覽器並將你的存儲過程導入爲「函數導入」(你的SP不能使用#tempTables,但你可以使用@tableVariables);在函數導入嚮導中,您會看到一個「創建複雜類型」按鈕。

SP成爲模型上下文中的方法,您可以使用它來獲取IEnumerable [TheComplexType]。

在EF4.1代碼中,首先它更簡單,您可以將[ComplexType]屬性放在任何類的頂部,並且可以將該類型用作context.ExecuteStoreQuery [T]的返回類型。如果您的屬性完全按照返回的列名(並且類型排列)命名,則映射是「魔術」 - 它只是起作用。