In Entity Framework 6 è stato introdotto il metodo AddRange. È ottimo per i grandi inserti perché il metodo DbSet.Add attiva sempre DetectChanges che rallenta notevolmente il processo. Volevo solo utilizzare un codice esistente basato sull'interfaccia IDbSet quando ho realizzato che non ha il metodo AddRange. Esiste solo nella classe DbSet.Perché non esiste alcun metodo AddRange/RemoveRange nell'interfaccia IDbSet nell'entità 6?
Ho cercato su Google un po 'e ho trovato questa discussione - http://forums.asp.net/t/1978828.aspx?Why+is+there+no+AddRange+method+for+System+Data+Entity+IDbSet+T+ - ma non c'è una chiara conclusione sul motivo per cui il metodo AddRange in realtà non esiste nell'interfaccia IDbSet.
È un bug o c'è qualche buona ragione per non esserci? Qualche idea?
UPDATE
Qui https://entityframework.codeplex.com/workitem/2781 Microsoft mi ha dato una risposta:
Questo legato alla progettazione. L'approccio all'interfaccia non è stato ottimale per DbSet perché l'aggiunta di membri interrompe qualsiasi applicazione esistente che implementa l'interfaccia.
Dato che vogliamo essere in grado di aggiungere membri a DbSet, passiamo a un approccio di classe base in cui DbSet è una classe base che puoi direttamente prendere in giro o ereditare.
Qui ci sono alcuni link che mostrano come utilizzare DbSet piuttosto che IDbSet:
https://msdn.microsoft.com/en-us/data/dn314429
https://msdn.microsoft.com/en-us/data/dn314431
Mi chiedo se fosse per la compatibilità con le versioni precedenti, in modo che le vecchie app con classi che implementano 'IDbSet' non si interrompessero improvvisamente perché non implementano il metodo' AddRange() '. –
Ma, se ho ragione, accadrebbe solo se EF è stato aggiornato alla versione superiore. Durante questo aggiornamento credo che problemi del genere possano essere risolti. Tuttavia, forse hai ragione. – Landeeyo
È possibile trasmettere l'oggetto al tipo DbSet senza problemi, giusto? –