处理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及以上版本。