上一篇我们介绍了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. [争什么! 掺在一起做撒尿牛丸啊! 笨蛋]ASP.NET Core 2.0 + EF6 + Linux +MySql混搭

    好消息!特好消息!同时使用ASP.NET Core 2.0和.NET Framework类库还能运行在linux上的方法来啦! 是的,你没有看错!ASP.NET Core 2.0,.NET Frame ...

  2. 【java】随机生成6位的数字

    int radomInt = new Random().nextInt(999999); int radomInt2 =(int)((Math.random()*9+1)*100000); Syste ...

  3. 前端入门14-JavaScript进阶之继承

    声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Trans ...

  4. ArcGIS 网络分析[2.5] VRP(车辆配送)【较难】

    什么是VRP? VRP就是车辆配送. 大家有没有想象过一个城市的某个快递营业点,是怎么让各个快递员配送快递的? 每个快递员针对那片区域的客户,如何走路线才最省时间? 也许你会说,最短路径分析可以做到— ...

  5. 【Dojo 1.x】笔记6 配置对象dojoConfig的用处和真身所在

    dojoConfig是对整个Dojo开发环境的配置,它的位置必须是页面的最前,可以是script标签也可以是独立的js文件. 它允许开发者为Dojo SDK的各个方面设置选项和默认行为. 但是,这个对 ...

  6. 预置第三方apk到MTK项目相关问题总结

    目前5.0之后项目预置方式通用步骤为: 建立apk文件夹;  置目标apk到该文件夹下;   解压缩apk查看是否包含lib/文件夹(apk项目是否包含lib库文件);  在该文件夹下编写Androi ...

  7. KASAN实现原理【转】

    1. 前言 KASAN是一个动态检测内存错误的工具.KASAN可以检测全局变量.栈.堆分配的内存发生越界访问等问题.功能比SLUB DEBUG齐全并且支持实时检测.越界访问的严重性和危害性通过我之前的 ...

  8. Bootstrap -- 初见 Bootstrap

    Bootstrap -- 初见 Bootstrap Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. ...

  9. 删除网络中的本地连接*x等

    1.运行-regedit 打开注册表 定位到 HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control Network {4D36E972-E325-11 ...

  10. Python基础——0前言

    python虽然这几年才兴起,但是已经是一门“老”语言了. python的诞生历史也很有趣.Python的创始人为Guido van Rossum(龟叔).1989年圣诞节期间,在阿姆斯特丹,Guid ...