2009-02-23 8 views
8

Ho una procedura memorizzata nel mio modello di dati entità e l'ho aggiunta alla funzione di importazione.Importazione di funzioni nel modello di entità con un tipo di reso non-entità

Il problema è ... Visual Studio genera il codice funzione nel code-behind del modello se e solo se si specifica che il ritorno è un tipo di entità. I tipi scalari e di ritorno nullo non funzionano. Visual Studio non genera il codice funzione quando li scelgo.

C'è qualcosa che mi manca, o è un bug?
Qualche soluzione?


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

risposta

8

E 'non tanto un problema in quanto è la mancanza di una caratteristica. Entity Framework non supporta le stored procedure che restituiscono valori scalari in questo momento. Credo che questo dovrebbe cambiare in .NET 4.0. Nel frattempo, è possibile eseguire tale stored procedure utilizzando la connessione del negozio, disponibile tramite CreateDbCommand.

+0

Grazie. L'interfaccia utente è ingannevole in quanto consente di selezionare i tipi di ritorno scalari e nulli. –

+0

Ho una domanda successiva sull'uso di CreateDbCommand. Vedi: http://stackoverflow.com/questions/587173/execute-a-stored-procedure-in-entity-framework-from-within-an-ado-net-dataservice –

4

Poiché l'unica cosa che funziona ora è mappare il tipo di ritorno a un'entità, una soluzione è creare una vista che corrisponda ai dati di ritorno e creare un'entità per la vista. Questo funzionerà solo se l'SP sta facendo un SELECT per restituire un set di risultati, non un valore di ritorno. Ho ottenuto questo a lavorare con un'applicazione di esempio, in questo modo: 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 

creare l'ambiente il tipo di ritorno a View_1 funzione di importazione e costruire il modello.

in codice:

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(); 
     } 
     } 
    } 

Assicurarsi di impostare i nomi delle colonne esattamente lo stesso tra la vista e SP. Toby

+0

+1 for View workaround – walterhuang

Problemi correlati