如何处理在Entity Framwork中返回不同输出的存储过程。 例如,在sp上,有条件和条件。 if condition返回整数,否则condition返回datatable。如何使用实体框架处理此问题 请指教。
答案 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及以上版本。