处理实体框架中的存储过程

时间:2013-06-18 08:43:45

标签: c# asp.net-mvc entity-framework stored-procedures

如何处理在Entity Framwork中返回不同输出的存储过程。 例如,在sp上,有条件和条件。 if condition返回整数,否则condition返回datatable。如何使用实体框架处理此问题 请指教。

4 个答案:

答案 0 :(得分:3)

从EF 4.1开始,这是可能的。 唯一的要求是知道在每种情况下SP将返回什么。

在我的例子中,我使用

DbContext.Database.SqlQuery<TElement>(string sql, params object[] parameters)

此泛型方法将您希望用于实现的类型作为通用参数。它还需要您想要作为参数执行的SQL表达式,以及它作为参数数组的参数。

简化的SP(无输入参数)用法是:

var res = ctx.Database.SqlQuery<MyResultType1>("dbo.MyStoredProcedure");

foreach (var r in res)
{
    System.Console.Out.WriteLine(
        "col1:{0}; col2:{1}; col3={2}", 
        r.Col1,
        r.Col2,
        r.Col3);
}

所以,你可以这样做:

IEnumerable res
if(...your logic...) 
{
    res = ctx.Database.SqlQuery<MyResultType1>(...your SP call...);
}
else
{
    res = ctx.Database.SqlQuery<MyResultType2>(...your SP call...);
}

这样您就可以按照自己的方式使用SP输出结果集填充您的集合。

答案 1 :(得分:2)

从数据库中单击更新模型选择存储过程并确保在功能导入(模型浏览器)中添加了该过程

您可以从编辑功能导入窗口

更改返回值

然后执行db.myProcedure();

答案 2 :(得分:1)

例如: 只需拖放存储过程,然后

 db.procedure(element1, element2);

 db.SubmitChanges();

答案 3 :(得分:1)

Ef4不支持具有不同类型的多个返回的存储过程。我们可以通过直接调用Sp通过sql代码来实现,也可以在linq中执行模式。

否则我们需要使用EF 4.1及以上版本。