2011-12-28 28 views
2

我有一個存儲過程在我的asp.net MVC3應用程序中使用實體框架:轉換存儲過程結果的模型對象

CREATE PROCEDURE dbo.MinMax 
AS 

DECLARE @T1 TABLE(MinColorsId int,MAXColorsId int) 
INSERT @T1 
select MIN(ColorsId) as MinColorsId,MAX(ColorsId) as MAXColorsId 
from DiamondInfoes 
SELECT * FROM @T1 
RETURN 

在我的模型我有相同的屬性名稱的程序表結果:

public class colorModel 
{ 
    [Display(Name = "MinColorsId")] 
    public float MinColorsId { get; set; } 

    [Display(Name = "MaxColorsId")] 
    public float MaxColorsId { get; set; } 
} 

在我運行存儲過程控制器:

private _ModelContainer m_db = new _ModelContainer(); 
var minmax = m_db.MinMax(); 

我想設置的colorModel與包含程序結果的minmax? (由短的路,我有很多屬性...)

+0

什麼樣的結果返回m_db.MinMax()? – 2011-12-28 11:44:06

+0

你如何將存儲過程映射到模型?通過設計人員導入時,您可以選擇返回類型。 – 2011-12-28 12:26:37

+0

System.Data.Objects.ObjectResult Hadas 2011-12-28 12:30:17

回答

7

首先,可以簡化您的存儲過程是:

CREATE PROCEDURE dbo.MinMax 
AS 
    SELECT 
     MIN(ColorsId) AS MinColorsId, 
     MAX(ColorsId) AS MaXColorsId 
    FROM dbo.DiamondInfoes 

絕對沒有必要也不具有表變量的任何一點 - 它只會對你的TempDB造成壓力。

下一頁 - 如果你在.NET 4.0和使用數據庫,第一種方法 - 你可以導入存儲過程到您的EDMX模型從嚮導:

enter image description here

下一步,進入到在Visual Studio中使用Model Browser並在模型的物理「存儲」部分中找到新導入的存儲過程。在存儲過程中,右鍵單擊並選擇Add Function Import

enter image description here

現在彈出對話框,讓你有機會選擇什麼樣的這個存儲過程返回 - 在你的情況,你說你已經有一個這代表結果類型 - 所以你的情況,你應該找到這種類型的下拉爲Entities - 選擇它並關閉對話框:

enter image description here

您現在應該有一個方法,你的ObjectContext派生CL代表這個存儲過程的屁股,並返回你選擇的類型的實體。