Как объединить массовые данные с помощью EF [closed]

У меня есть следующий метод,

public void InsertMembers(List<UserDTO> members)
{
    List<EFModel.ClientData.Member> membersInEfModel = new List<EFModel.ClientData.Member>();
    mapper.Map<List<UserDTO>, List<EFModel.ClientData.Member>>(members, membersInEfModel);

    using (TransactionScope scope = new TransactionScope())
    {
        context.Configuration.AutoDetectChangesEnabled = false;

        foreach (var member in membersInEfModel)
        {

            var existedMember = context.Members.FirstOrDefault(x => x.MemberNumber == member.MemberNumber);
            if (existedMember == null)
            {
                context.Members.Add(member);
            }
            else
            {
                member.MemberId = existedMember.MemberId;
                context.Entry(existedMember).CurrentValues.SetValues(member);
            }
        }
        context.SaveChanges();
        context.Configuration.AutoDetectChangesEnabled = true;
        scope.Complete();
    }
}

который вызывает большую часть наборов данных. предположим, у меня есть список 30000, и я вызвал этот метод 6 раз, передав отдельный список 5000 в InsertMembers() метод. Но после вставки 20000 записей иногда появляется эта ошибка.

The underlying provider failed on Open.
   at System.Data.Entity.Core.EntityClient.EntityConnection.Open()
   at System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(Boolean shouldMonitorTransactions)
   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
   at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__5()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
   at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
   at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
   at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)

Есть какой-нибудь способ повысить эффективность InsertMembers() метод? Это происходит только тогда, когда таблица членов состоит из огромных записей данных, таких как 50000< записи

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *