将存储过程结果转换为模型对象

时间:2011-12-28 11:29:34

标签: c# sql entity-framework entity-framework-4

我有一个存储过程在我的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 个答案:

答案 0 :(得分: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中的模型浏览器,在模型的物理“存储”部分中查找新导入的存储过程。在存储过程中,右键单击并选择Add Function Import

enter image description here

现在会弹出一个对话框,让您有机会选择此存储过程返回的内容 - 在您的情况下,您说您已经有一个表示该结果的类型 - 所以在您的情况下,您应该在Entities的下拉菜单 - 选择并关闭对话框:

enter image description here

现在,您应该在ObjectContext派生类上有一个表示此存储过程的方法,并返回所选类型的实体。