我用EF去执行Oracle存储过程,想要获得返回的数据集,有什么办法吗
EF对存储过程的支持基本等于废,感觉这技术都没成熟
我擦~~那这么办,要用存储过程,只有用ado.net吗
@Dunn: 网上不是有很多方法么,好像要手动配置model吧
@虾哈哈: 我试过一个办法,可以获得数据集,但是貌似要配置实体类型,还要在web.config添加节点,这个很麻烦~~也不科学。
@Dunn: 所以用来更新数据还可以,复杂一点的查询就悲剧了
@Dunn: 还有就是自己做一个vs插件自己解析并更新代码,但这就要看自己的水平怎么样了
@虾哈哈: 好复杂,绝对的新手,准备毕业的学生~~
MsSql是可以的,Oracle不知道。如
假设,存储过程GetNewUser,一个参数@CreateDate
var query = dataContext.SqlQuery<User>("exec GetNewUser @CreateDate", new SqlParameter { ParameterName = "@CreateDate", Value = DateTime.Now });
// ExecuteSqlCommand 执行命令 类似
你这个的话,也是支持单表的存储过程吧,如果是跨了表的存储过程,应该也是没办法的了
@Dunn:
晕,脚本都提交到数据库里,跟EF有关系?
肯定支持,楼主是 查询还是 执行命令。
查询的话,由于是强类型,会根据查询的列来反射,如果字段不对会出错,查询列,如果没有相应的实体,就新建一个,如 查询出多张表的列。
@Qlin: 我的是存储过程是查询的。你上面的传了<user>进去了,只能返回user类型的数据集了,我的意思是,如果我的存储过程里面,如果满足A条件,返回user;else 则返回custom。我的意思是这样的跨表,不是说返回的一个数据集里面包含了两个表的列。这样就无法选择反射的类型了
@Dunn:
存储过程有用就行。
至于你的 返回类型是另外一个问题了,感觉没区别,试想 如果不是执行存储过程返回的,是正常linq查询返回的,你又如何接收结果,可以代码里 if else,也可以数据库里进行统一,或者新建类
@Qlin: 不是你想的那样,你可以试试,你就明白我的痛苦了。我也知道代码里可以if~else。但是现在给出了再存储过程里if~else,我没办法啊~~~