如何向DbSet添加实体列表

hsh*_*hen 8 .net entity-framework

DbSet.Add()将单个实体添加到DbSet.但是没有DbSet.AddRange()来添加实体列表.有没有我可以直接从EF调用的方法,允许我添加一个实体列表?如果没有,EF有什么理由不提供这样的方法吗?

Jot*_*aBe 11

在EF6都DbSet.AddRangeDbSet.RemoveRange可用.

实现它们的原因是为了提高性能,通过禁用DetectChanges每个单独添加或删除实体来完成的操作.

更多细节:

注意:此方法仍然没有官方文档,因为EF仍然是RC1.

更新:EF6已经发布,.AddRange()的官方文档就在这里,但是在上面的链接中解释了它内部发生了什么.


hsh*_*hen 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);
        }
     }
  }
Run Code Online (Sandbox Code Playgroud)