EF查出來了List,然後循環改變這裏面的值,可以批量修改嗎?
測試,是可以的。
看看 context.Savechanges() 發生了什麼。
public virtual int SaveChanges(bool acceptAllChangesOnSuccess)
{
CheckDisposed();
DbContextDependencies.UpdateLogger.SaveChangesStarting(this);
TryDetectChanges();
try
{
var entitiesSaved = DbContextDependencies.StateManager.SaveChanges(acceptAllChangesOnSuccess);
DbContextDependencies.UpdateLogger.SaveChangesCompleted(this, entitiesSaved);
return entitiesSaved;
}
catch (DbUpdateConcurrencyException exception)
{
DbContextDependencies.UpdateLogger.OptimisticConcurrencyException(this, exception);
throw;
}
catch (Exception exception)
{
DbContextDependencies.UpdateLogger.SaveChangesFailed(this, exception);
throw;
}
}
TryDetectChanges 這個方法下去是
/// <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 void DetectChanges(IStateManager stateManager)
{
_logger.DetectChangesStarting(stateManager.Context);
foreach (var entry in stateManager.ToList()) // Might be too big, but usually _all_ entities are using Snapshot tracking
{
if (entry.EntityType.GetChangeTrackingStrategy() == ChangeTrackingStrategy.Snapshot
&& entry.EntityState != EntityState.Detached)
{
LocalDetectChanges(entry);
}
}
_logger.DetectChangesCompleted(stateManager.Context);
}
這裏會把所有entry.EntityState != EntityState.Detached 這個狀態的實體收集起來。
/// <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 void AddToCollectionSnapshot([NotNull] IPropertyBase propertyBase, [NotNull] object addedEntity)
{
EnsureRelationshipSnapshot();
_relationshipsSnapshot.AddToCollection(propertyBase, addedEntity);
}
detect之後,在改變他們