Sto lavorando con EF Core (codice prima) e voglio prendere i dati da una stored procedure. Il risultato restituito dovrebbe essere la classe che ho definito in base al risultato.
Potrei farlo funzionare se il tipo di ritorno è una delle entità. ex.
_context.Set<Entity>().FromSql("dbo.Stored_Proc").ToList();
ma non se i miei valori di ritorno non sono un'entità nel contesto.
Qualsiasi aiuto sarebbe apprezzato.
È abbastanza facile
Ecco 3 passaggi per farlo:
public class SPModel { public int Id {get;set;} public DateTime? CreatedDateTime {get;set;} etc.. }
public class YourDbContext: DbContext { public virtual DbSet<SPModel> YourDbSet { get; set; } .... }
Non associare questa classe a nessuna tabella sql
var collection = await dbContext.YourDbSet.FromSql("EXECUTE yourStoredProcedure {0},{1}", param1, param2).ToListAsync();
Alcune cose utili:
- Puoi usare il blocco try / catch per vedere se hai perso alcune proprietà
- È possibile espandere la classe del modello per aggiungere nuove proprietà, ma evitare l'accesso 'set' come: public bool IsLoaded {get;}
- fai attenzione se il tuo SP restituisce un tipo nullable, in questo caso il modello deve avere anche il tipo nullable