2010-02-04 64 views
6

我需要運行一些自定義SQL以從表中返回對象列表。我正在使用ExecuteStoreQuery。實體框架:ObjectContext.ExecuteStoreQuery產生分離對象

var q = context.ExecuteStoreQuery<ProductionUnit>(MySelectString, new SqlParameter("@ProductionUnitId", value)); 

這不會導致包含ObjectResult集合Q,但實際ProductionUnit元素被分離和他們的EntityKey爲空。當試圖處理這些對象或其關係時,會產生很多問題。我的SQL查詢返回一個結果集,其中包含相應ProductionUnits表的所有列(僅此而已)。

還有什麼我需要做的,以便跟蹤這些對象,或者是這種設計行爲?

回答

3

自己解決 - 您需要使用ExecuteStoreQuery重載,它允許您爲返回的實體指定EntitySet名稱。

+9

請問您能否提供解決方案 – user287745 2011-02-13 09:32:47

1

由於似乎沒有成爲一個公認的答案,代碼...

由於@neaorin說,爲確保更改返回實體進行跟蹤,使用方法

ExecuteStoreQuery <。 >(CommandText中,entitySetName,在MergeOptions,ARGS PARAMATERS)

如下:

string strQuery = "SELECT * FROM employees WHERE id=999"; 
List<employee> employees; 
services = context.ExecuteStoreQuery<employee>(strQuery, "employees", System.Data.Objects.MergeOption.AppendOnly).ToList(); 

如果其中一些返回的實體已經在上下文中浮動,即是覆蓋它們還是使用現有對象(默認設置),MergeOptions參數將指示框架執行的操作。