首页 新闻 会员 周边 捐助

Entity Framwork 存储过程

0
[已解决问题] 解决于 2012-06-29 08:24

问题:如果我使用存储过程创建一个IQueryable<实体类型/复杂类型>对象,但我需要对存储过程执行结果进行过滤。因为某些原因,我不希望向存储过程传递参数。虽然我可以用URI:http://localhost:54321/Wcf/ZJ.svc/QueryTest?$filter = FacilityName eq 'PC'这种格式对结果进行过滤,但是我对这种方法存在顾虑 
var context = new Entities(); 
var query = context.存储过程().AsQueryable(); 
query对象是否是先返回所有存储过程结果,然后再对结果集进行过滤? 
comment:存储过程 select * from T_ZJ_Facility 

我用EntitySql进行测试的结果 
public IQueryable<T_ZJ_Facility> QueryTest() 
{var context = new Entities(); 
var query = context.T_ZJ_Facility.AsQueryable(); 
return query.AsQueryable();} 
我跟踪了sql执行记录,如下 
SELECT 
[Extent1].[FacilityId] AS [FacilityId], 
[Extent1].[OrgCode] AS [OrgCode], 
[Extent1].[FacilityCode] AS [FacilityCode], 
[Extent1].[FacilityName] AS [FacilityName], 
[Extent1].[FacilityType] AS [FacilityType], 
[Extent1].[InstallPosition] AS [InstallPosition], 
[Extent1].[FacilityFunction] AS [FacilityFunction], 
[Extent1].[Frequency] AS [Frequency], 
[Extent1].[ExecuteTimes] AS [ExecuteTimes], 
[Extent1].[UseTime] AS [UseTime], 
[Extent1].[FacilityStatus] AS [FacilityStatus], 
[Extent1].[CreateBy] AS [CreateBy], 
[Extent1].[CreateTime] AS [CreateTime], 
[Extent1].[ModifyBy] AS [ModifyBy], 
[Extent1].[ModifyTime] AS [ModifyTime] 
FROM [dbo].[T_ZJ_Facility] AS [Extent1] 
WHERE 'PC' = [Extent1].[FacilityName]

问题补充:

IQueryable<T> 返回的是关于数据源的表达式树,当我使用EntitySql,LINQ构造表达式树,返回的IQueryalbe<T>并不是数据而是表达式树。

问题:如果我使用实体类映射的存储过程构造query时,返回的IQueryable<T>是数据还是存储过程在实体模型映射的表达式树。

江南_雾里看花的主页 江南_雾里看花 | 菜鸟二级 | 园豆:394
提问于:2012-06-27 08:19
< >
分享
最佳答案
0

我跟踪了数据库执行记录,exec 存储过程名

实体类应该是不可以映射sql语句为表达式树,而表达式树是可以映射成sql语句。使用存储过程不能很好和IQueryable的接口进行完美兼容,特别在存储过程返回的数据量比较大时,而有效数据较少时。

当然可以将参数传递给存储过程来解决这个问题。

江南_雾里看花 | 菜鸟二级 |园豆:394 | 2012-06-29 08:22
其他回答(2)
0

SELECT 哪些字段是由实体类以及映射关系的定义决定的。

如果查询结果没有你想要的字段,可以在实体类中添加相应的属性。

dudu | 园豆:30559 (高人七级) | 2012-06-27 10:57

这个我是知道的,现在关心的是使用存储过程的效率。返回值AsQueryable类型,在调用是在前台可以使用

$filter,$top,$expand。。。对存储结果进行进一步的操作。我现在不知道我传入的这些条件是在数据库里执行还是在WCF服务里执行。

注:结果没问题,但是以后进行复杂查询操作和对前台调用的接口的兼容,希望使用存储过程不使用参数。

支持(0) 反对(0) 江南_雾里看花 | 园豆:394 (菜鸟二级) | 2012-06-28 08:28
0

我也想尝试着Entity Framework 使用存储过程。

jerry-Tom | 园豆:4077 (老鸟四级) | 2012-06-27 11:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册