4

如何处理在实体框架中返回不同输出的存储过程。例如,在 sp 上,有 if 条件和 else 条件。if 条件返回整数,else 条件返回数据表。如何在 vs. 中使用实体框架来处理这个问题。请指教。

4

4 回答 4

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 输出结果集填充您的集合。

于 2013-06-18T12:46:49.650 回答
2

单击从数据库中更新模型选择您的存储过程并确保它的过程已添加到函数导入(模型浏览器)中

您可以从编辑函数导入窗口更改返回值

然后执行db.myProcedure();

于 2013-06-18T08:54:35.530 回答
1

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

否则我们需要使用 EF 4.1 及更高版本。

于 2013-06-18T12:21:52.273 回答
1

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

 db.procedure(element1, element2);

 db.SubmitChanges();
于 2013-06-18T08:50:40.180 回答