在Entity Framework中处理存储过程

3

如何处理在Entity Framework中返回不同输出的存储过程。 例如,在存储过程中,有if条件和else条件。如果条件返回整数,否则条件返回数据表格。如何在vs中使用entity framework来处理这个问题。 请给出建议。


可能是Entity Framework - 存储过程返回值的重复问题。 - Ed Chapel
是的,目前在 EF 中这是不可能的。我尝试了很多次。 - Raju S Nair
4个回答

3
从EF 4.1开始,这是可能的。唯一的要求是知道每种情况下SP将返回什么。
在我的例子中,我使用了。
DbContext.Database.SqlQuery<TElement>(string sql, params object[] parameters)

这个通用的方法以一个泛型参数作为你想要用于实例化的类型。它还需要将你想要执行的SQL表达式以及其参数作为 param'd 数组作为参数。

简化的 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输出结果集。


2

点击“从数据库更新模型”,选择你的存储过程,并确保它已经被添加到“函数导入”中(在模型浏览器中)

你可以在“编辑函数导入”窗口中更改返回值

然后只需执行db.myProcedure();


1

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

 db.procedure(element1, element2);

 db.SubmitChanges();

1
Ef4不支持多个返回类型的存储过程。我们可以通过直接使用SQL代码调用存储过程或在LINQ中进行模式来解决这个问题。否则,我们需要使用EF 4.1及以上版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接