上一篇我们介绍了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的实体都将被插入到数据库中。

Entity Framework Core系列之DbContext(添加)的更多相关文章

  1. Entity Framework Core系列之DbContext(修改)

    上一篇我们介绍了Entity Framework Core系列之DbContext(添加),这一篇我们介绍下修改数据 修改实体的方法取决于context是否正在跟踪需要修改的实体. 下面的示例中实体由 ...

  2. Entity Framework Core系列之DbContext

    前言: EF Core DbContext表示与数据库的会话,并提供与数据库通信的API,具有以下功能: 数据库连接 数据操作,如查询和持久化 更改追踪 模型构建 数据映射 对象缓存 事务管理 数据库 ...

  3. Entity Framework Core系列之DbContext(删除)

    上一篇我们介绍了Entity Framework Core系列之DbContext(修改),这一篇我们介绍下删除数据 修改实体的方法取决于context是否正在跟踪需要删除的实体. 下面的示例中con ...

  4. Entity Framework Core系列之什么是Entity Framework Core

    前言 Entity Framework Core (EF Core)是微软推荐的基于.NET Core framework的应用程序数据访问技术.它是轻量级,可扩展并且支持跨平台开发.EF Core是 ...

  5. Entity Framework Core(3)-配置DbContext

    设计时 DbContext 配置 EF Core 设计时工具如迁移需要能够发现和创建的工作实例DbContext以收集有关应用程序的实体类型以及它们如何映射到数据库架构的详细信息的类型. 此过程可以为 ...

  6. Entity Framework Core 2.1,添加种子数据

    EFCore 2.1出来有一段时间了,里面的新功能还没怎么用,今天研究下如何使用EF Core 2.1添加种子数据. 这部分的官方文档地址是:https://docs.microsoft.com/en ...

  7. Entity Framework Core系列之实战(ASP.NET Core MVC应用程序)

    本示例演示在ASP.NET 应用程序中使用EF CORE创建数据库并对其做基本的增删改查操作.当然我们默认你的机器上已经安装了.NET CORE SDK以及合适的IDE.本例使用的是Visual St ...

  8. ASP.NET CORE系列【六】Entity Framework Core 之数据迁移

    原文:ASP.NET CORE系列[六]Entity Framework Core 之数据迁移 前言 最近打算用.NET Core写一份简单的后台系统,来练练手 然后又用到了Entity Framew ...

  9. 002从零开始入门Entity Framework Core——DbContext生存期、配置和初始化

    阅读须知:本文为入门介绍.指引文章,所示代码皆为最简易(或仅为实现功能)的演示示例版本,不一定切实符合个人(企业)实际开发需求. 一.DbContext生存期 DbContext 的生存期从创建实例时 ...

随机推荐

  1. css隐藏滚动条

    xhtml中隐藏滚动条在用ie6浏览有框架的xhtml页面的时候,默认会水平和垂直滚动条会一起出现,这是ie6的一个bug,在firefox上是正常的,出现的原因是其对XHTML 1.0 transi ...

  2. mac IDE输入光标变成块状 改为竖线

    mac下安装IDE后,出现“输入光标变成块状”的情况,是因为安装的时候装了ideaVim插件,改为竖线光标的方法:把ideaVim插件去掉

  3. BZOJ5118: Fib数列2(二次剩余)

    题意 题目链接 题目链接 一种做法是直接用欧拉降幂算出\(2^p \pmod{p - 1}\)然后矩阵快速幂. 但是今天学习了一下二次剩余,也可以用通项公式+二次剩余做. 就是我们猜想\(5\)在这个 ...

  4. JS数组Sort方法的使用

    想用sort方法对数组排下序,代码如下: var nums = "12 645 6 85 81 0 9 365 4 752".split(" ").map(fu ...

  5. BGP:我们不生产路由,而是路由的搬运工

    1.BGP协议自身不能生产路由,它主要通过配置来将本地路由进行发布或者引入其他路由协议产生的路由. 有两种方法, 方法一.在BGP视图下,通过network命令将本地路由发布到BGP路由表中, 通过本 ...

  6. 2018年IOS/Android UI设计规范

    更多参考: 2017最新设计尺寸及规范 UI : 2018年IOS/Android UI设计规范 转载:https://www.jianshu.com/p/03e5cdd4ffd6

  7. Android Button四种点击事件和长按事件

    项目XML代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...

  8. axios中的this指向问题

    最近在使用vue过程中,使用axios进行接口请求,确发现取不到值,返回为undefined. show (item) { let searchText = item.keyword console. ...

  9. QT获取本机IP和Mac地址

    #include <QNetworkInterface> #include <QList> void MainWindow::getIPPath() { QString str ...

  10. XUnit 依赖注入

    XUnit 依赖注入 Intro 现在的开发中越来越看重依赖注入的思想,微软的 Asp.Net Core 框架更是天然集成了依赖注入,那么在单元测试中如何使用依赖注入呢? 本文主要介绍如何通过 XUn ...