2009-02-23 19 views
8

Tengo un procedimiento almacenado en mi modelo de datos de entidad y lo he agregado a la función de importación.Importación de funciones en el modelo de entidad con un tipo de devolución que no es entidad

El problema es ... Visual Studio genera el código de función en el código subyacente del modelo si y solo si especifico que la devolución sea un tipo de entidad. Los tipos de retorno escalar y nulo no funcionan. Visual Studio no genera el código de función cuando los elijo.

¿Hay algo que me falta, o es esto un error?
¿Alguna solución temporal?


mediante Visual Studio 2008 v9.0.30729.1 SP (Service Pack 1)

Respuesta

8

No es tanto un error, ya que es la falta de una característica. Entity Framework simplemente no admite procedimientos almacenados que devuelvan valores escalares en este momento. Creo que se supone que esto cambiará en .NET 4.0. Mientras tanto, puede ejecutar dicho procedimiento almacenado utilizando la conexión de tienda, disponible a través del CreateDbCommand.

+0

Gracias. La interfaz de usuario es engañosa, ya que permite seleccionar tipos de retorno escalar y nulo. –

+0

Tengo una pregunta de seguimiento sobre el uso de CreateDbCommand. Ver: http://stackoverflow.com/questions/587173/execute-a-stored-procedure-in-entity-framework-from-within-an-ado-net-dataservice –

4

Dado que lo único que funciona ahora es asignar el tipo de devolución a una entidad, una solución consiste en crear una vista que corresponda a los datos de devolución y crear una entidad para la vista. Esto solo funcionará si el SP está haciendo un SELECCIONAR para devolver un conjunto de resultados, no un valor de retorno. Tengo esto para trabajar con una aplicación de ejemplo, así: SP:

ALTER PROCEDURE [dbo].[DoSomething] 
    @param1 varchar(50), 
    @param2 varchar(50) 
AS 
BEGIN 
    DECLARE @ID INT 
    SET NOCOUNT ON; 
    INSERT tmp_header (fname, lname) VALUES (@param1, @param2) 
    SET @ID = SCOPE_IDENTITY() 
    SELECT @ID AS 'id' 
END 

VISTA:

CREATE VIEW [dbo].[View_1] 
AS 
SELECT 0 as id 

crear el escenario del tipo de retorno a la importación View_1 función y construir el modelo.

en código:

class Program 
    { 
     static void Main(string[] args) 
     { 
     using (PS_RADSTESTEntities ctx = new PS_RADSTESTEntities()) 
     { 
      EntityConnection ec = ctx.Connection as EntityConnection; 
      ec.Open(); 
      DbTransaction txn = ec.BeginTransaction(); 
      ObjectResult<View_1> result = ctx.DoSomething("Toby", "Kraft"); 
      View_1 row = result.Single(); 
      int id = row.id; 
// do some other interesting things ... 
      ctx.SaveChanges(); 
      txn.Commit(); 
     } 
     } 
    } 

Asegúrese de ajustar los nombres de las columnas exactamente iguales entre la vista y SP. Toby

+0

+1 para la solución de la vista – walterhuang

Cuestiones relacionadas