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