2012-03-11 19 views
32

En Entity Framework 4, tengo un problema cuando uso la importación de funciones en un procedimiento almacenado y luego lo uso como un valor escalar. Genera el código siguiente:Cómo manejar ObjectResult en Entity Framework 4

public virtual ObjectResult<Nullable<int>> GetTopEmployee() 
{ 
    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>("GetTopEmployee"); 
} 

¿Cómo uso el valor de retorno de este método?

Por ejemplo, este código funciona bien:

NorthwindEntities db = new NorthwindEntities(); 
var i = db.GetTopEmployee(); 

Pero quiero usar valores de retorno sólo como int. Si utilizo el valor de retorno como no mientras estoy en la función de importación, dé -1 como resultado.

Cuando intento el código de abajo:

NorthwindEntities db2 = new NorthwindEntities(); 
int j = db.GetTopEmployee(); 

arroja un error que dice:

No se puede convertir implícitamente el tipo 'System.Data.Objects.ObjectResult' a 'int'

¿Cómo analizo lo anterior?

+1

¿Cuál es el código que da '-1' como salida? No entiendo "valor de retorno como no en la importación de funciones". –

+0

Quiero decir si restablezco mi procedimiento almacenado a través de la importación de funciones y luego marcó el valor de retorno como none, entonces me da -1 como salida – user1037747

Respuesta

77

Observe que el tipo de devolución de GetTopEmployee es ObjectResult<Nullable<int>>. ObjectResult<T> implementa IEnumerable<T> por lo que su método es capaz de devolver más de uno Nullable<int>.

Supongo que está tratando de obtener algún tipo de Id. Para el empleado. Si está absolutamente seguro de que solo obtendrá un resultado, podría usar el siguiente código para obtener ese Id.

var topId = db.GetTopEmployee().FirstOrDefault(); 

topId podría ser nulo. Tendrá que usar topId.Value o var result = topId ?? -1; para obtener un resultado int.

NorthwindEntities db = new NorthwindEntities(); 
    int j = db.GetTopEmployee().FirstOrDefault() ?? -1; 
+0

Si está absolutamente seguro de que obtendrá un resultado, debe usar 'db.GetTopEmployee () .Primero() ', o en otras palabras, use esto si desea recibir una excepción si no se devolvieron los resultados. – xr280xr

Cuestiones relacionadas