Entity Framework 6 e stored procedure

1

Sono nuovo in Entity Framework e sto attualmente sviluppando un'applicazione MVC 5 con Code-First Entity Framework 6.1.2.

Ho bisogno di scrivere rapporti personalizzati. Invece di scrivere complessi linq, posso scrivere un paio di stored procedure veloci e scrivere i risultati su CSV. Posso chiamare questi proc con EF? o starei meglio usando ADO.NET?

So che posso fare:

var data = db.Database.SqlQuery<ReportDetailed>("sp_rpt_report @reportType @endDate, @startDate", parameters).ToList<ReportDetailed>();

Ma avrei bisogno di costruire un modello piuttosto grande per ogni risultato del rapporto, e questo mi sembra un sacco di lavoro per una piccola ricompensa e sbagliato.

    
posta chatters 31.07.2015 - 16:09
fonte

1 risposta

0

Penso che il commento di Robert Harvey sia un ottimo consiglio. Nel lungo periodo, penso che vorresti averlo fatto in Linq.

Ecco perché:

  1. Le modifiche a Entity Framework per gli oggetti dati saranno più semplici per apportare modifiche ai set di dati del report. Le stored procedure probabilmente falliranno. Avrai bisogno di mantenerli separatamente. Non ci sarà alcuna logica condivisa che possa essere riutilizzata.
  2. Imparerai molto meglio Linq.

Penso che tu possa fare qualche passo per raggiungere questo obiettivo. Sembra che tu stia meglio in questo in sql e potresti avere delle pressioni per farlo. Quindi vai avanti e crea una stored procedure che funzioni. Capirai meglio i requisiti. Quindi puoi iniziare a lavorare sul refactoring in linq. Avrai un set di risultati dalla stored procedure che puoi utilizzare per testare / confrontare i tuoi risultati Linq. Ti sentirai più a tuo agio sapendo che sei stato in grado di realizzare la stessa cosa nella nuova lingua.

In questo modo puoi mettere in produzione la tua app parallelamente a diventare un programmatore Linq migliore. Il prossimo programmatore che deve mantenere questa app lo apprezzerà. E non dimenticare, quel nuovo programmatore potrebbe essere tu tra un anno o giù di lì.

    
risposta data 31.07.2015 - 16:58
fonte