Creazione di un livello di accesso ai dati per un'applicazione MVC aziendale interna con Entity Framework e il modello di repository. In alcuni casi, ho bisogno di aggiornare, ad esempio, 100k righe in una tabella con 100 milioni di righe in un database di SQL Server 2008 R2.Can Entity Framework può generare un'istruzione UPDATE ... WHERE in SQL?
Sto utilizzando EF6, il targeting di un database legacy esistente è il refactoring. Sono nuovo in Entity Framework, ma ho molta esperienza con SQL Server.
Non importa quanto mi sembra di strutturare la mia dichiarazione di aggiornamento, quando eseguo un profiler, vedo 60k aggiornamenti individuali per ID. Questo può richiedere fino a 5 minuti per l'esecuzione. Tuttavia, ho detto un "numero di lotto" che è indicizzato per un gruppo di questi record. Esiste un modo per creare UPDATE
questi record con una singola clausola where generata da EF? La mia soluzione è stata semplicemente scrivere un semplice sp che poi ho chiamato EF.
EntityFramework non esegue operazioni batch. Ogni operazione sarà una operazione sul database per record (come hai scoperto) È possibile scrivere ed eseguire la propria istruzione SQL tramite EntityFramework o chiamare una stored procedure e passare i parametri appropriati tramite EntityFramework. – Tommy
Nella mia esperienza vorrei andare con un SP per operazioni così 'grandi'. –
Le attuali versioni di EF v6 non supportano le operazioni di batch-up, ma il team EF sta lavorando sodo su EF v7 e alla fine * supporterà le operazioni batch. Per ora - o hai bisogno di ricorrere alle tue soluzioni, o dare un'occhiata a soluzioni di terze parti come [EntityFramework.Extended] (https://github.com/loresoft/EntityFramework.Extended) –