2010-02-04 12 views
6

Ho bisogno di eseguire alcuni SQL personalizzati per restituire un elenco di oggetti da una tabella. Sto usando ExecuteStoreQuery per quello.Entity Framework: ObjectContext.ExecuteStoreQuery produce oggetti distaccati

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

Ciò comporta q contenente una collezione ObjectResult, ma gli elementi ProductionUnit effettivi vengono staccate e loro EntityKey è nullo. Ciò crea una serie di problemi quando si tenta di lavorare su alcuni di questi oggetti o le loro relazioni. La mia query SQL restituisce un set di risultati contenente tutte le colonne della rispettiva tabella ProductionUnits (e niente di più).

Qualsiasi altra cosa che devo fare per avere questi oggetti tracciati o questo comportamento è di progettazione?

risposta

3

Risolto autonomamente: è necessario utilizzare l'overload di ExecuteStoreQuery che consente di specificare il nome EntitySet per le entità restituite.

+9

potresti fornire la soluzione in un esempio – user287745

1

Poiché non sembra essere una risposta accettata con codice ...

Come @neaorin dice, per garantire le modifiche alle entità restituiti sono monitorati, utilizzare il metodo

ExecuteStoreQuery <. .> (CommandText, entitySetName, MergeOptions, args paramaters)

come segue:

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

Il parametro MergeOptions determina il funzionamento del framework se alcune di queste entità restituite sono già presenti nel contesto, ovvero se sovrascriverle o utilizzare gli oggetti esistenti (impostazione predefinita).

Problemi correlati