2010-02-04 13 views
6

Necesito ejecutar algunos SQL personalizados para devolver una lista de objetos de una tabla. Estoy usando ExecuteStoreQuery para eso.Entity Framework: ObjectContext.ExecuteStoreQuery produce objetos separados

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

Esto da lugar a q contiene una colección ObjectResult, pero los elementos ProductionUnit reales se separan y su EntityKey es nulo. Esto crea una serie de problemas al tratar de trabajar en algunos de estos objetos o sus relaciones. Mi consulta SQL devuelve un conjunto de resultados que contiene todas las columnas de la tabla respectiva ProductionUnits (y nada más).

¿Algo más que tenga que hacer para rastrear estos objetos o es este el diseño?

Respuesta

3

Resuelto yo mismo - necesita usar la sobrecarga ExecuteStoreQuery que le permite especificar el nombre de EntitySet para las entidades devueltas.

+9

podría proporcionar la solución en un ejemplo – user287745

1

Como no parece ser una respuesta aceptada con el código ...

Como @neaorin dice, para asegurar los cambios en las unidades devueltas se realiza un seguimiento, utilice el método

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

de la siguiente manera:

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

El parámetro MergeOptions dicta lo que hace Framework si algunas de estas entidades devueltas ya están flotando en el contexto, es decir, si sobrescribirlas o utilizar los objetos existentes (el valor predeterminado).

Cuestiones relacionadas