我有一个存储过程在我的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
? (简而言之,我有很多属性......)
答案 0 :(得分:7)
首先,您可以将存储过程简化为:
CREATE PROCEDURE dbo.MinMax
AS
SELECT
MIN(ColorsId) AS MinColorsId,
MAX(ColorsId) AS MaXColorsId
FROM dbo.DiamondInfoes
拥有该表变量绝对没有必要也没有任何意义 - 它只会给你的TempDB
带来压力。
下一步 - 如果您使用的是.NET 4.0并使用数据库优先方法 - 您可以从向导将该存储过程导入EDMX模型:
接下来,转到Visual Studio中的模型浏览器,在模型的物理“存储”部分中查找新导入的存储过程。在存储过程中,右键单击并选择Add Function Import
:
现在会弹出一个对话框,让您有机会选择此存储过程返回的内容 - 在您的情况下,您说您已经有一个表示该结果的类型 - 所以在您的情况下,您应该在Entities
的下拉菜单 - 选择并关闭对话框:
现在,您应该在ObjectContext
派生类上有一个表示此存储过程的方法,并返回所选类型的实体。