Używam EF6
i ze względu na niską prędkość metody AddRange()
potrzebuję użyć BulkInsert
. Dodałem więc pakiet NuGet BulkInsert dla EF6 przez here.Entity Framework Bulk Insert zgłasza błąd KeyNotFoundException
Pierwszą rzeczą, jaką otrzymał po dodaniu dll
s było to ostrzeżenie:
Znaleziono konflikty między różnymi wersjami tego samego zestawu zależnego . Ustaw właściwość "AutoGenerateBindingRedirects" na w pliku projektu.
Zrobiłem List
wszystkich moich Contact
podmiotów mianowicie contactsToInsert które muszą być dodane (Moje kontakty masz klucza obcego w innej tabeli, zbyt). Kiedy próbowałem uruchomić następujący kod, otrzymuję KeyNotFoundException
, który twierdzi "Podany klucz nie był obecny w słowniku".
using (var db = new Entities(myConnectionString))
{
db.BulkInsert(contactsToInsert);
db.SaveChanges();
}
NB. Uruchomiłem BulkInsert wewnątrz BackgroundWorker
. Czy to może być przyczyną problemu, sądząc po this fix?
StackTrace:
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at EntityFramework.MappingAPI.Mappers.MapperBase.BindForeignKeys() in c:\dev\EntityFramework.MappingAPI\trunk\src\EntityFramework.MappingAPI\Mappers\MapperBase.cs:line 603
at EntityFramework.MappingAPI.Mappings.DbMapping..ctor(DbContext context) in c:\dev\EntityFramework.MappingAPI\trunk\src\EntityFramework.MappingAPI\Mappings\DbMapping.cs:line 101
at EntityFramework.MappingAPI.EfMap.Get(DbContext context) in c:\dev\EntityFramework.MappingAPI\trunk\src\EntityFramework.MappingAPI\EfMap.cs:line 60
at EntityFramework.MappingAPI.Extensions.MappingApiExtensions.Db(DbContext ctx, Type type) in c:\dev\EntityFramework.MappingAPI\trunk\src\EntityFramework.MappingAPI\Extensions\MappingApiExtensions.cs:line 51
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector)
at EntityFramework.BulkInsert.Helpers.MappedDataReader`1..ctor(IEnumerable`1 enumerable, IEfBulkInsertProvider provider) in c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Helpers\MappedDataReader.cs:line 58
at EntityFramework.BulkInsert.Providers.EfSqlBulkInsertProviderWithMappedDataReader.Run[T](IEnumerable`1 entities, SqlTransaction transaction, BulkInsertOptions options) in c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Providers\EfSqlBulkInsertProviderWithMappedDataReader.cs:line 22
at EntityFramework.BulkInsert.Providers.ProviderBase`2.Run[T](IEnumerable`1 entities, IDbTransaction transaction, BulkInsertOptions options) in c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Providers\ProviderBase.cs:line 77
at EntityFramework.BulkInsert.Providers.ProviderBase`2.Run[T](IEnumerable`1 entities, BulkInsertOptions options) in c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Providers\ProviderBase.cs:line 109
at EntityFramework.BulkInsert.Extensions.BulkInsertExtension.BulkInsert[T](DbContext context, IEnumerable`1 entities, SqlBulkCopyOptions sqlBulkCopyOptions, Nullable`1 batchSize) in c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Extensions\BulkInsertExtension.cs:line 95
at EntityFramework.BulkInsert.Extensions.BulkInsertExtension.BulkInsert[T](DbContext context, IEnumerable`1 entities, Nullable`1 batchSize) in c:\dev\EntityFramework.BulkInsert\dev\Src\EntityFramework.BulkInsert\Extensions\BulkInsertExtension.cs:line 75
at Prospect.Update.bw_DoWork(Object sender, DoWorkEventArgs e) in c:\Users\pedram.mobedi\Documents\Visual Studio 2013\Projects\Prospect\Update.cs:line 546
at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
mam napotkasz dokładnym rzeczy, i nie byli w stanie znaleźć rozwiązanie tego. Ostatecznie musiałem stworzyć drugi kontekst EF bez właściwości nawigacyjnych i tylko klasę, którą próbuję wstawić za pomocą BulkInsert. To tylko obejście i na pewno nie jest to poprawka, ale pozwoliło mi dalej pracować. –
Czy sprawdziłeś najnowsze wersje współpracujące z 6.1.3. Korzystałem już z bibliotek dla niektórych projektów, żadnych problemów do tej pory :). Kolejna kwestia: czy możesz podać swoją definicję klasy kontaktów? –