2017-07-26 23 views
0

現在、私はEntityFramework.BulkInsert-ef6-extをhugoclで使用しています。ソフトウェアは現在毎日実行されており、「テーブルマッピングはありません」と表示されています。 1週間に1回から2回、残りの日はうまく動作します。テーブルマッピングがありません

以下

エラースタックトレースです:

at EntityFramework.BulkInsert.Helpers.MappedDataReader`1..ctor(IEnumerable`1 enumerable, IEfBulkInsertProvider provider) 
    at EntityFramework.BulkInsert.Providers.EfSqlBulkInsertProviderWithMappedDataReader.Run[T](IEnumerable`1 entities, SqlTransaction transaction) 
    at EntityFramework.BulkInsert.Providers.ProviderBase`2.Run[T](IEnumerable`1 entities, IDbTransaction transaction) 
    at EntityFramework.BulkInsert.Providers.ProviderBase`2.Run[T](IEnumerable`1 entities) 
    at EntityFramework.BulkInsert.Extensions.BulkInsertExtension.BulkInsert[T](DbContext context, IEnumerable`1 entities, BulkInsertOptions options) 
    at EntityFramework.BulkInsert.Extensions.BulkInsertExtension.BulkInsert[T](DbContext context, IEnumerable`1 entities, SqlBulkCopyOptions sqlBulkCopyOptions, Nullable`1 batchSize) 
    at EntityFramework.BulkInsert.Extensions.BulkInsertExtension.BulkInsert[T](DbContext context, IEnumerable`1 entities, Nullable`1 batchSize) 
    at ADUtility.Logic.Task.GetDLAssociatesBeforeRunTask.<>c__DisplayClass1_0.<Execute>b__0(TP_DLs dl) in ... 

誰もがなぜこれが起こっている上の任意のアイデアを提供することができますか?以下は

私が使用していたコードです:

public List<DLAssociateViewModel> GetDLAssociates(string groupName, PrincipalContext context = null) 
    { 
     var dlAssociate = new List<DLAssociateViewModel>(); 
     var group = GroupPrincipal.FindByIdentity(context ?? GlobalContext, groupName); 
     if (group == null) 
     { 
      throw new Exception("DL not found on Active Directory"); 
     } 
     dlAssociate.AddRange(group.Members.OfType<UserPrincipal>() 
      .Select(member => new DLAssociateViewModel 
      { 

       DLName = groupName, 
       ADUsername = string.IsNullOrEmpty(member.EmployeeId) ? member.SamAccountName : member.EmployeeId, 
      })); 
     return dlAssociate; 
    } 
+0

質問に直接コードを追加してください。 – timiTao

答えて

0

私は正確に直面しています:

以下
var dlAssociatesBeforeRun = adHelper.GetDLAssociates(dl.DLName) 
           .Select(x => 
            new TP_DLAssociatesBeforeRun 
            { 
             DLID = dl.ID, 
             ADUsername = x.ADUsername, 
             CreateDate = DateTime.Now, 
             CreateBy = "ADUtility.CLI", 
             UpdateDate = DateTime.Now, 
             UpdateBy = "ADUtility.CLI" 
            }).ToList(); 
          _logger.Trace($"Detected {dlAssociatesBeforeRun.Count} for DL {dl.DLName}"); 
          // ReSharper disable once InvertIf 
          if (dlAssociatesBeforeRun.Any()) 
          { 
           db.BulkInsert(dlAssociatesBeforeRun); 
           db.SaveChanges(); 

は、基本的にはビューモデルオブジェクトのリストを返すですGetDLAssociates方法であります同じ問題。 私はそれがいくつかの静的なプロパティに関係していると確信しています。私は複数のEFコンテキストを使用するときに発生します(私はParallel.ForEachを使用していて、すべてのスレッドに対して専用のEFコンテキストを作成しています)。

私はParallelOptionsでプレイし、MaxDegreeOfParallelism == 1のとき問題が再現されないことがわかりました。

だから、私のために迅速な回避策は次のとおりです。 私のリポジトリコンストラクタで([0]新しいSomeEntity)(代わりに、あなたのケースでSomeEntityのTP_DLAssociatesBeforeRunContext.BulkInsertを追加します。 'warming up'のようなもので、(EntityFramework BulkInsert-ef6-ext拡張で使用される)MappedDataReaderを適切に初期化します。

Btw、あなたは不要ですdb.SaveChanges(); BulkInsertの後のはDB上で直接実行されています。

関連する問題