1
我正在编写一个RIA服务,它也使用SOAP公开。 它的一个方法需要从一个非常大的表中读取数据。ObjectContext,实体和加载性能
在开始的时候,我做这样的事情:
public IQueryable<MyItem> GetMyItems()
{
return this.ObjectContext.MyItems.Where(x => x.StartDate >= start && x.EndDate <= end);
}
但后来我停了下来,因为我很担心性能。
据我了解MyItemsis完全加载和“Where”只是过滤在属性MyItems的第一次访问加载的元素。由于MyItems将会有很多行,我认为这不是正确的做法。
我试图谷歌有点问题,但没有有趣的结果出现。
所以,我想我可以在GetMyItems方法内部创建一个新的上下文实例,并有选择地加载MyItems。例如:
public IQueryable<MyItems> GetMyItems(string Username, DateTime Start, DateTime End)
{
using (MyEntities ctx = new MyEntities())
{
var objQuery = ctx.CreateQuery<MyItems>(
"SELECT * FROM MyItems WHERE Username = @Username AND Timestamp >= @Start AND Timestamp <= @End",
new ObjectParameter("@Username", Username),
new ObjectParameter("@Start", Start),
new ObjectParameter("@End", End));
return objQuery.AsQueryable();
}
}
但我不确定这是否是正确的方法。
您能否协助我并指出正确的做法?
在此先感谢, 干杯, Gianluca。
我会喜欢这个。我使用ToTraceString进行了检查,我可以看到查询是使用我提供的参数构建的,这使得我可以放心地解决可能的性能问题。谢谢克雷格! – 2011-02-24 15:49:44
对于阅读此帖子的其他人:我也发现了这个有趣的页面:http://msdn.microsoft.com/en-us/library/cc853327.aspx。干杯,G. – 2011-02-24 15:50:37