Преобразовать результат хранимой процедуры в объект модели - PullRequest
2 голосов
/ 28 декабря 2011

У меня есть хранимая процедура В моем приложении asp.net mvc3, использующем Entity Framework:

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, который содержит результат процедуры? (коротко говоря, у меня много свойств ...)

1 Ответ

7 голосов
/ 28 декабря 2011

Прежде всего, вы можете упростить хранимую процедуру так:

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 и найдите вновь импортированную хранимую процедуру в физическом разделе «Хранилище» вашей модели. В вашей хранимой процедуре щелкните правой кнопкой мыши и выберите Add Function Import:

enter image description here

Теперь появляется диалоговое окно, которое дает вам возможность выбрать, что возвращает эта хранимая процедура - в вашем случае вы сказали, что у вас уже есть тип, представляющий этот результат - так что в вашем случае вы должны найти этот тип в выпадающий список для Entities - выберите его и закройте диалоговое окно:

enter image description here

Теперь у вас должен быть метод в вашем ObjectContext -приобретенном классе, который представляет эту хранимую процедуру и возвращает сущность выбранного вами типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...