/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual int ExecuteTransaction( IEnumerable <IUpdateEntry> entries, IDiagnosticsLogger <DbLoggerCategory.Update> updateLogger) { int rowsAffected = 0; lock (_lock) { foreach (IUpdateEntry entry in entries) { if (HandleEntry(entry)) { rowsAffected++; } } foreach (KeyValuePair <IEntityType, IFileContextTable> table in _tables.Value) { table.Value.Save(); } } updateLogger.ChangesSaved(entries, rowsAffected); return(rowsAffected); }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual int ExecuteTransaction( IEnumerable <IUpdateEntry> entries, IDiagnosticsLogger <DbLoggerCategory.Update> updateLogger) { int rowsAffected = 0; lock (_lock) { foreach (IUpdateEntry entry in entries) { IEntityType entityType = entry.EntityType; Debug.Assert(!entityType.IsAbstract()); if (!_tables.Value.TryGetValue(entityType, out IFileContextTable table)) { _tables.Value.Add(entityType, table = _tableFactory.Create(entityType, options)); } if (entry.SharedIdentityEntry != null) { if (entry.EntityState == EntityState.Deleted) { continue; } table.Delete(entry); } switch (entry.EntityState) { case EntityState.Added: table.Create(entry); break; case EntityState.Deleted: table.Delete(entry); break; case EntityState.Modified: table.Update(entry); break; } rowsAffected++; } foreach (KeyValuePair <IEntityType, IFileContextTable> table in _tables.Value) { table.Value.Save(); } } updateLogger.ChangesSaved(entries, rowsAffected); return(rowsAffected); }
public virtual int ExecuteTransaction( IList <IUpdateEntry> entries, IDiagnosticsLogger <DbLoggerCategory.Update> updateLogger) { var rowsAffected = 0; lock (_lock) { // ReSharper disable once ForCanBeConvertedToForeach for (var i = 0; i < entries.Count; i++) { var entry = entries[i]; var entityType = entry.EntityType; Debug.Assert(!entityType.IsAbstract()); var key = _useNameMatching ? (object)entityType.Name : entityType; var table = EnsureTable(key, entityType); if (entry.SharedIdentityEntry != null) { if (entry.EntityState == EntityState.Deleted) { continue; } table.Delete(entry); } switch (entry.EntityState) { case EntityState.Added: table.Create(entry); break; case EntityState.Deleted: table.Delete(entry); break; case EntityState.Modified: table.Update(entry); break; } rowsAffected++; } foreach (KeyValuePair <object, IFileContextTable> table in _tables) { table.Value.Save(); } } updateLogger.ChangesSaved(entries, rowsAffected); return(rowsAffected); }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual int ExecuteTransaction( IEnumerable <IUpdateEntry> entries, IDiagnosticsLogger <DbLoggerCategory.Update> updateLogger) { var rowsAffected = 0; lock (_lock) { foreach (var entry in entries) { var entityType = entry.EntityType; Debug.Assert(!entityType.IsAbstract()); var key = _useNameMatching ? (object)entityType.Name : entityType; if (!_tables.Value.TryGetValue(key, out var table)) { _tables.Value.Add(key, table = _tableFactory.Create(entityType)); } if (entry.SharedIdentityEntry != null) { if (entry.EntityState == EntityState.Deleted) { continue; } table.Delete(entry); } switch (entry.EntityState) { case EntityState.Added: table.Create(entry); break; case EntityState.Deleted: table.Delete(entry); break; case EntityState.Modified: table.Update(entry); break; } rowsAffected++; } } updateLogger.ChangesSaved(entries, rowsAffected); return(rowsAffected); }
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> public virtual int ExecuteTransaction( IList <IUpdateEntry> entries, IDiagnosticsLogger <DbLoggerCategory.Update> updateLogger) { var rowsAffected = 0; lock (_lock) { // ReSharper disable once ForCanBeConvertedToForeach for (var i = 0; i < entries.Count; i++) { var entry = entries[i]; var entityType = entry.EntityType; Check.DebugAssert(!entityType.IsAbstract(), "entityType is abstract"); var table = EnsureTable(entityType); if (entry.SharedIdentityEntry != null) { if (entry.EntityState == EntityState.Deleted) { continue; } table.Delete(entry); } switch (entry.EntityState) { case EntityState.Added: table.Create(entry); break; case EntityState.Deleted: table.Delete(entry); break; case EntityState.Modified: table.Update(entry); break; } rowsAffected++; } } updateLogger.ChangesSaved(entries, rowsAffected); return(rowsAffected); }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual int ExecuteTransaction( IEnumerable <IUpdateEntry> entries, IDiagnosticsLogger <DbLoggerCategory.Update> updateLogger) { var rowsAffected = 0; lock (_lock) { foreach (var entry in entries) { var entityType = entry.EntityType; Debug.Assert(!entityType.IsAbstract()); IInMemoryTable table; if (!_tables.Value.TryGetValue(entityType, out table)) { _tables.Value.Add(entityType, table = _tableFactory.Create(entityType)); } switch (entry.EntityState) { case EntityState.Added: table.Create(entry); break; case EntityState.Deleted: table.Delete(entry); break; case EntityState.Modified: table.Update(entry); break; } rowsAffected++; } } updateLogger.ChangesSaved(entries, rowsAffected); return(rowsAffected); }