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之后,在改变他们