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
fonte
2009-04-24 16:27:42
Grazie. L'interfaccia utente è ingannevole in quanto consente di selezionare i tipi di ritorno scalari e nulli. –
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 –