DbSet.Add()将单个实体添加到DbSet。但是没有DbSet.AddRange()来添加实体列表。有没有我可以直接从EF调用的方法,允许我添加一个实体列表?如果没有,EF有什么理由不提供这样的方法吗?
答案 0 :(得分:11)
在EF6中,DbSet.AddRange
和DbSet.RemoveRange
都可用。
实施它们的原因是为了提高性能,通过为每个添加或删除实体禁用DetectChanges
来完成的工作。
更多详情:
注意:此方法仍然没有官方文档,因为EF仍然是RC1。
更新:EF6已经发布,the official documentation for .AddRange() is here,但是上面的链接中有关于它内部发生的事情的解释。
答案 1 :(得分:6)
Eranga的评论可以说是正确的。我想真正关心的是如果基础表的密钥是标识列,如果列表中的任何实体都设置了密钥属性,应该怎么做:
出于这个原因,将AddRange()实现到泛型类DbSet并没有多大意义。如果你想要一些特别符合你需要的东西,你可以扩展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);
}
}
}