处理entity framework中的存储过程

如何处理在Entity Framwork中返回不同输出的存储过程。 例如,在sp上,有条件和条件。 if condition返回整数,否则condition返回datatable。 如何使用entity framework处理这个与请建议。

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

在我的例子中,我使用

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

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

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

 var res = ctx.Database.SqlQuery("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(...your SP call...); } else { res = ctx.Database.SqlQuery(...your SP call...); } 

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

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

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

然后只执行db.myProcedure();

例如:只需拖放存储过程即可

  db.procedure(element1, element2); db.SubmitChanges(); 

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

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