Entity Framework Core系列之DbContext(添加)

上一篇我们介绍了Entity Framework Core系列之DbContext,对DbContext有了概念上的了解,这篇将介绍DbContext添加数据

通过DbContext添加实体的主要方法:

  • Add<TEntity>(TEntity entity)
  • Add(object entity)
  • AddRange(IEnumerable<object> entities)
  • AddRange(params object[] entities)

这些方法是EF Core 中DbContext的新方法,在以前的EF DbContext是没有的。

通常,您将使用Add的通用版本,可省略类型参数,因为编译器将从传递给方法的参数中推断类型。以下两个例子完全相同:

当使用任意一版Add方法时,上下文context将跟踪传递给该方法的实体,并将EntityState值应用到该方法中。除此之外,上下文Context还对图中尚未被上下文跟踪的所有其他对象应用添加的EntityState值。在下一个例子中,增加的State值也被应用到Books中:

 var author3 = new Author
                {
                    FirstName = "yixuan",
                    LastName = "han",
                    Books = new List<Book>{
                        new Book { Title = "Hamlet"},
                        new Book { Title = "Othello" },
                        new Book { Title = "MacBeth" }
                    }
                };
                context.Add(author3);
                context.SaveChanges();

Books是通过Author的Books属性被引用而增加的。在下一个例子中,不会添加Books:

 var author4 = new Author { FirstName = "yixuan", LastName = "han" };
                var hamlet = new Book { Title = "Hamlet", Author = author4 };
                var othello = new Book { Title = "Othello", Author = author4 };
                var macbeth = new Book { Title = "MacBeth", Author = author4 };
                context.Add(author4);
                context.SaveChanges();

尽快Book中已经实例化Author的属性,但是Author并不知道他们的关系,所以其Books属性还是null,不会被添加到上下文中。

添加多条记录

AddRange方法用于在一次方法调用中向数据库添加多个对象。下一个示例中的代码与前面的示例非常相似,但AddRange方法用于将所有的Book和Author一次性保存到数据库中:

 var author5 = new Author { FirstName = "yixuan", LastName = "han" };
                var books = new List<Book> {
                    new Book { Title = "It", Author = author5 },
                    new Book { Title = "Carrie", Author = author5 },
                    new Book { Title = "Misery", Author = author5 }
                };
                context.AddRange(books);
                context.SaveChanges();

AddRange方法的这个版本采用了IEnumerable < object>。EF Core非常聪明,可以识别添加到上下文中的对象的类型,并形成适当的SQL。Author和所有的书都有关联,所以也是会被添加到上下文的。

AddRange方法的另一个版本采用了params数组,并提供了一次性向数据库添加许多不相关对象的功能:

var author6 = new Author { FirstName = "yixuan", LastName = "han" };
                var book = new Book { Title = "Adventures of Huckleberry Finn" };
                context.AddRange(author6, book);
                context.SaveChanges();

当在DbContext上调用SaveChanges方法时,所有具有添加状态值EntityState的实体都将被插入到数据库中。

posted @ 2018-07-05 13:27  yixuan.han  阅读(1826)  评论(0编辑  收藏  举报