我有一个重写的SaveChangesAsyncEF 方法,如下所示:
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
{
ChangeTracker
.Entries()
.Where(e => e.State == EntityState.Added)
.Select(e => e.Entity as BaseEntity)
.ForEach(e => e.ModifiedOn = e.CreatedOn = DateTimeOffset.Now);
return base.SaveChangesAsync(cancellationToken);
}
Run Code Online (Sandbox Code Playgroud)
BaseEntity也是我的类,具有一些常见属性,例如CreatedOn每个实体都继承自该类。这个重写的方法使用我自己的ForEach扩展:
public static IEnumerable<T> ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)
{
foreach (var item in enumerable)
{
action(item);
yield return item;
}
}
Run Code Online (Sandbox Code Playgroud)
当有yield语句时,foreach循环不会执行。如果我把它改成这样:
public static IEnumerable<T> ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)
{
foreach (var item in enumerable)
{
action(item);
}
return enumerable;
}
Run Code Online (Sandbox Code Playgroud)
然后就可以完美运行了。为什么yield 在这次迭代中没有执行它?