dis*_*kid 10 c# entity-framework bulkinsert
我正在使用EF6,由于AddRange()我需要使用的方法速度慢BulkInsert.所以我通过这里添加了用于EF6的BulkInsert的NuGet包.
添加dlls 后我收到的第一件事就是这个警告:
发现同一依赖程序集的不同版本之间存在冲突.请在项目文件中将"AutoGenerateBindingRedirects"属性设置为true.
我做了List我所有的Contact实体即contactsToInsert需要添加(我的联系人在另一个表的外键,太).当我尝试运行以下代码时,我收到一个KeyNotFoundException声称" 字典中没有给定密钥 ".
using (var db = new Entities(myConnectionString))
{
db.BulkInsert(contactsToInsert);
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
NB.我在里面运行BulkInsert BackgroundWorker.难道这可能是通过判断问题的原因此修复程序?
堆栈跟踪:
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)
Run Code Online (Sandbox Code Playgroud)
小智 0
好吧,我遇到了同样的错误,无法在网上找到任何答案,所以必须深入查找,所以这就是我的想法:
当您的实体具有继承实体并且子实体如果未定义为 DBSet 的一部分时,它会标记此类错误,其次,不确定为什么它期望新的 DbContext 仅包含用于批量插入的相关实体(如果有任何其他实体)在那里它引发了同样的错误。
所以这是第二个原因,所以我必须解决这两个问题,然后像马一样奔跑!
值得一试,所以尝试一下
| 归档时间: |
|
| 查看次数: |
4370 次 |
| 最近记录: |