2016-06-29 13 views
0

enter image description here Erhalte diesen Fehler für Bulk Isert. Nur für eine große Anzahl von Datensätzen.Bulk-Insert-Fehler-Entity-Framework

switch (actionType) 
      { 
       case AuditLogSaveAction.Asynchronous: 
        ORMAsyncActionQueue.AuditLog.AddLogsToQueue(logsToSave); 
        break; 
       case AuditLogSaveAction.Synchronous: 
        **this.BulkInsert<AuditLog>(logsToSave); <- Exception Thrown here.** 
        break; 
      } 
+0

ist es möglich, den entsprechenden Code stattdessen für dieses Bild –

+0

die Frage –

+0

bearbeitet zu zeigen, wie Sie auditlog für bulkinsert Karte haben Betrieb? – Nathan

Antwort

1

Ich hatte das gleiche error. Wenn Sie BulkInset mit einer gleichzeitigen Logik verwenden, zum Beispiel: mehrere Threads oder Aufgaben, können Sie genau diesen Fehler machen. Es verursachte keinen Thread-sicheren Code (wurde im nativen Repository behoben), aber das entsprechende Nuget-Paket hat immer noch diesen Fehler, sodass Sie das Problem einfach lösen können - einfach das Repository herunterladen und das aktuelle Nuget-Paket damit ersetzen. This peace of code contains exception:

public static IEfBulkInsertProvider Get(DbContext context) 
{ 
    var connectionTypeName = context.Database.Connection.GetType().FullName; 
    if (!Providers.ContainsKey(connectionTypeName)) 
    { 
     throw new BulkInsertProviderNotFoundException(connectionTypeName); 
    } 

    return Providers[connectionTypeName]().SetContext(context); 
} 

Nicht sicher Code von Providers Eigenschaft fädeln, oben gezeigt:

private static Dictionary<string, Func<IEfBulkInsertProvider>> Providers 
{ 
    get 
    { 
     //commented pice of code does not exist at Nuget Package 
     //lock (ProviderInitializerLockObject) 
     //{ 
      if (_providers == null) 
      { 
       _providers = new Dictionary<string, Func<IEfBulkInsertProvider>>(); 

       // bundled providers 
       Register<EfSqlBulkInsertProviderWithMappedDataReader>("System.Data.SqlClient.SqlConnection"); 
       //Register<EfSqlCeBulkiInsertProvider>("System.Data.SqlServerCe.4.0"); 
      } 
     //} 

     return _providers; 
    } 
}