DbSet.Add()方法可以向DbSet中添加一个实体。但是,没有像DbSet.AddRange()这样的方法可以添加一组实体。是否有办法我可以直接从EF中调用一个方法以添加一个实体列表?如果没有,那么EF为什么不提供这样的方法呢?
DbSet.Add()方法可以向DbSet中添加一个实体。但是,没有像DbSet.AddRange()这样的方法可以添加一组实体。是否有办法我可以直接从EF中调用一个方法以添加一个实体列表?如果没有,那么EF为什么不提供这样的方法呢?
在EF6中,DbSet.AddRange
和DbSet.RemoveRange
均可用。
实现它们的原因是为了提高性能,通过禁用每个实体的添加或删除的DetectChanges
来实现。
更多细节:
注意:由于EF仍处于RC1阶段,此方法尚无官方文档。
更新:EF6已发布,.AddRange()的官方文档在此,但内部发生的事情的说明在上述链接中。
Eranga的评论可以说是正确的。我猜真正的问题在于,如果列表中的任何实体都设置了关键属性,那么应该采取什么措施,如果底层表的键是标识列:
因此,在泛型类DbSet中实现AddRange()并没有太多意义。如果您需要特定的内容,可以按以下方式扩展DbSet。
public static class EFExtension
{
public static void AddRange<TEntity>(this DbSet<TEntity> dbSet, IList<TEntity> entities) where TEntity : class
{
foreach (TEntity e in entities)
{
dbSet.Add(e);
}
}
}
AddRange
方法。提供一个简单的API与核心功能比杂乱无章的界面更好。 - Eranga