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的实体都将被插入到数据库中。
Entity Framework Core系列之DbContext(添加)的更多相关文章
- Entity Framework Core系列之DbContext(修改)
上一篇我们介绍了Entity Framework Core系列之DbContext(添加),这一篇我们介绍下修改数据 修改实体的方法取决于context是否正在跟踪需要修改的实体. 下面的示例中实体由 ...
- Entity Framework Core系列之DbContext
前言: EF Core DbContext表示与数据库的会话,并提供与数据库通信的API,具有以下功能: 数据库连接 数据操作,如查询和持久化 更改追踪 模型构建 数据映射 对象缓存 事务管理 数据库 ...
- Entity Framework Core系列之DbContext(删除)
上一篇我们介绍了Entity Framework Core系列之DbContext(修改),这一篇我们介绍下删除数据 修改实体的方法取决于context是否正在跟踪需要删除的实体. 下面的示例中con ...
- Entity Framework Core系列之什么是Entity Framework Core
前言 Entity Framework Core (EF Core)是微软推荐的基于.NET Core framework的应用程序数据访问技术.它是轻量级,可扩展并且支持跨平台开发.EF Core是 ...
- Entity Framework Core(3)-配置DbContext
设计时 DbContext 配置 EF Core 设计时工具如迁移需要能够发现和创建的工作实例DbContext以收集有关应用程序的实体类型以及它们如何映射到数据库架构的详细信息的类型. 此过程可以为 ...
- Entity Framework Core 2.1,添加种子数据
EFCore 2.1出来有一段时间了,里面的新功能还没怎么用,今天研究下如何使用EF Core 2.1添加种子数据. 这部分的官方文档地址是:https://docs.microsoft.com/en ...
- Entity Framework Core系列之实战(ASP.NET Core MVC应用程序)
本示例演示在ASP.NET 应用程序中使用EF CORE创建数据库并对其做基本的增删改查操作.当然我们默认你的机器上已经安装了.NET CORE SDK以及合适的IDE.本例使用的是Visual St ...
- ASP.NET CORE系列【六】Entity Framework Core 之数据迁移
原文:ASP.NET CORE系列[六]Entity Framework Core 之数据迁移 前言 最近打算用.NET Core写一份简单的后台系统,来练练手 然后又用到了Entity Framew ...
- 002从零开始入门Entity Framework Core——DbContext生存期、配置和初始化
阅读须知:本文为入门介绍.指引文章,所示代码皆为最简易(或仅为实现功能)的演示示例版本,不一定切实符合个人(企业)实际开发需求. 一.DbContext生存期 DbContext 的生存期从创建实例时 ...
随机推荐
- 根据数值获得概率密度pdf和累积密度分布cdf(MATLAB语言)
y=randn(1,3000); % 生成1-by-3000的标准正态分布随机数 ymin=min(y); ymax=max(y); x=linspace(ymin,ymax,20); %将最大最小区 ...
- .NET: 使用.NET Core CLI开发应用程序
要开发.NET Core应用程序,除了使用强大的Visual Studio之外,还可以使用.NET Core CLI..NET Core CLI (Command-Line Interface),也就 ...
- Linux文件基本操作管理
这一篇总结Linux系统中文件和目录的创建,复制,移动和重命名,包括删除这些最常用的操作. 创建 1,创建目录 使用命令:mkdir 实践:在根目录下创建一个目录命名为mcgrady 2,创建文件 使 ...
- MySQL优化特定类型的查询
优化关联查询 如果想要优化使用关联的查询,我们需要特别留意以下几点: 确保ON或者USING子句中的列上有索引.在创建索引的时候需要考虑到关联的顺序.当表A和表B用列c关联的时候,如果优化器的关联顺序 ...
- PHP 脚本不报错
场景 当运行PHP脚本,访问数组中不存在的key时,脚本不报错,如下: <?php $arr = [1,2,3]; // 不报错,返回null var_dump($arr['abc']); 解决 ...
- finereport报表--动态格间运算 二
报表输出
- angular懒加载
生成module和routing.module文件 {//路径 path: 'InfectionFillInComponent', loadChildren: './component/his/inf ...
- #WEB安全基础 : HTML/CSS | 0x6嵌套标签(图片链接)
嵌套标签我们已经讲一次了,在0X4.1里,我们把列表嵌套了 你觉得文字链接难看得令人作呕,好,你再也不会有这种感觉了 一如既往,一个html文件和一个存放图片的文件夹 index.html的代码, ...
- asyncio异步IO--协程(Coroutine)与任务(Task)详解
摘要:本文翻译自Coroutines and Tasks,主要介绍asyncio中用于处理协程和任务的方法和接口.在翻译过程中,译者在官方文档的基础上增加了部分样例代码和示意图表,以帮助读者对文档的理 ...
- js判断时间是否超过了16:30
// 判断时间是否超过了16:30 // true: 已超时 // false: 未超时 function timeCompare() { var now = new Date(); var nowT ...