再添雙我有具有以下方法庫基類:奇怪的實體框架的行爲 - 當IEnumerable不能列出
public void AddRange(IEnumerable<TEntity> entities)
{
Context.Set<TEntity>().AddRange(entities);
foreach (var entity in entities)
{
if (Context.Entry(entity).State == EntityState.Detached)
{
Context.Entry(entity).State = EntityState.Added;
}
}
}
我叫它像這樣:
uow.UserPermissions.AddRange(permissions);
其中UserPermissions是從基地繼承的存儲庫。
我看到一些奇怪的行爲,當權限不是列表時我無法解釋。例如,當我嘗試這樣:
var permissions = permissionDtos.Select(dto => new UserPermission()
{
...
});
uow.UserPermissions.AddRange(permissions);
實體框架儘可能多的權限分貝因爲有permissionDtos增加了兩倍。但是,如果我在select語句的末尾添加了ToList(),那麼奇怪的行爲就會消失。我還注意到,當我在Repository.AddRange()方法中註釋掉forEach循環(即修改上下文條目狀態)時,奇怪的行爲也會消失(即使不添加ToList())。
在此先感謝。