Entity Framework Core(3)-配置DbContext
设计时 DbContext 配置
EF Core 设计时工具如迁移需要能够发现和创建的工作实例DbContext
以收集有关应用程序的实体类型以及它们如何映射到数据库架构的详细信息的类型。 此过程可以为自动,只要该工具可以轻松地创建DbContext
,会将其配置同样到它如何将配置在运行时的方式。
尽管提供了必要的配置信息到任何模式DbContext
可在运行时,需要使用的工具DbContext
在设计时仅适用于有限数量的模式。 这些内容中更详细地介绍设计时上下文创建部分。
配置 DbContextOptions
DbContext
必须具有的实例DbContextOptions
才能执行任何工作。 DbContextOptions
实例执行的配置信息如:
- 数据库提供程序,若要使用,通常选择通过调用的方法,如
UseSqlServer
或UseSqlite
。 这些扩展方法需要相应的提供程序包,如Microsoft.EntityFrameworkCore.SqlServer
或Microsoft.EntityFrameworkCore.Sqlite
。 中定义的方法Microsoft.EntityFrameworkCore
命名空间。 - 任何必要的连接字符串或标识符的数据库实例中,通常作为参数传递到上述提供程序选择方法
- 任何提供程序级别的可选行为选择器,通常还链接到提供程序选择方法调用中
- 任何常规 EF Core 行为选择器,通常链接之后或之前提供程序选择器方法
下面的示例将配置DbContextOptions
若要使用 SQL Server 提供程序,在连接包含connectionString
变量、 提供程序级别的命令超时,以及可使在中执行的所有查询 EF Core 行为选择器DbContext
否跟踪默认情况下:
optionsBuilder
.UseSqlServer(connectionString, providerOptions=>providerOptions.CommandTimeout())
.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
提供程序选择器方法和上面提到的其他行为选择器方法是扩展方法上DbContextOptions
或特定于提供程序的选项类。 若要有权访问这些扩展方法,可能需要具有一个命名空间 (通常Microsoft.EntityFrameworkCore
) 中的作用域以及在项目中包含其他包依赖项。
DbContextOptions
可以提供给DbContext
通过重写OnConfiguring
方法或构造函数参数通过从外部。
如果将使用它们,OnConfiguring
最后应用,并且可以覆盖选项提供给构造函数参数。
构造函数参数
使用构造函数的上下文代码:
public class BloggingContext : DbContext
{
public BloggingContext(DbContextOptions<BloggingContext> options)
: base(options)
{ } public DbSet<Blog> Blogs { get; set; }
}
提示
DbContext 基构造函数还接受非泛型版本的DbContextOptions
,但不是建议使用多个上下文类型的应用程序使用的非泛型版本。
从构造函数自变量进行初始化的应用程序代码:
var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
optionsBuilder.UseSqlite("Data Source=blog.db"); using (var context = new BloggingContext(optionsBuilder.Options))
{
// do stuff
}
OnConfiguring
上下文代码OnConfiguring
:
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=blog.db");
}
}
应用程序代码来初始化DbContext
,它使用OnConfiguring
:
using (var context = new BloggingContext())
{
// do stuff
}
提示
此方法不会将自身添加到测试,除非测试以完整的数据库为目标。
使用依赖关系注入使用 DbContext
EF Core 支持使用DbContext
与依赖关系注入容器。 DbContext 类型可以通过使用添加到服务容器AddDbContext<TContext>
方法。
AddDbContext<TContext>
将这两个 DbContext 类型, TContext
,并相应DbContextOptions<TContext>
可用于从服务容器的注入。
请参阅多个读取以下依赖关系注入的其他信息。
添加Dbcontext
依赖关系注入到:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<BloggingContext>(options => options.UseSqlite("Data Source=blog.db"));
}
这要求将添加构造函数参数到 DbContext 类型接受DbContextOptions<TContext>
。
上下文代码:
public class BloggingContext : DbContext
{
public BloggingContext(DbContextOptions<BloggingContext> options)
:base(options)
{ } public DbSet<Blog> Blogs { get; set; }
}
(在 ASP.NET Core) 的应用程序代码:
public class MyController
{
private readonly BloggingContext _context; public MyController(BloggingContext context)
{
_context = context;
} ...
}
(服务提供商处直接使用,不太常见) 的应用程序代码:
using (var context = serviceProvider.GetService<BloggingContext>())
{
// do stuff
} var options = serviceProvider.GetService<DbContextOptions<BloggingContext>>();
Entity Framework Core(3)-配置DbContext的更多相关文章
- Entity Framework Core系列之DbContext(删除)
上一篇我们介绍了Entity Framework Core系列之DbContext(修改),这一篇我们介绍下删除数据 修改实体的方法取决于context是否正在跟踪需要删除的实体. 下面的示例中con ...
- Entity Framework Core系列之DbContext
前言: EF Core DbContext表示与数据库的会话,并提供与数据库通信的API,具有以下功能: 数据库连接 数据操作,如查询和持久化 更改追踪 模型构建 数据映射 对象缓存 事务管理 数据库 ...
- Entity Framework Core系列之DbContext(修改)
上一篇我们介绍了Entity Framework Core系列之DbContext(添加),这一篇我们介绍下修改数据 修改实体的方法取决于context是否正在跟踪需要修改的实体. 下面的示例中实体由 ...
- Entity Framework Core系列之DbContext(添加)
上一篇我们介绍了Entity Framework Core系列之DbContext,对DbContext有了概念上的了解,这篇将介绍DbContext添加数据 通过DbContext添加实体的主要方法 ...
- 002从零开始入门Entity Framework Core——DbContext生存期、配置和初始化
阅读须知:本文为入门介绍.指引文章,所示代码皆为最简易(或仅为实现功能)的演示示例版本,不一定切实符合个人(企业)实际开发需求. 一.DbContext生存期 DbContext 的生存期从创建实例时 ...
- .Net Entity Framework Core 用 HasColumnType 配置浮点数精度
一.前言 前段时间用.Net Entity Framework core搭建框架,需要配置浮点数的精度,发现.Net Entity Framework core 并没有HasPrecision方法.在 ...
- ASP.NET Core 配置 Entity Framework Core - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 配置 Entity Framework Core - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 Entity Fram ...
- Entity Framework Core 1.1 升级通告
原文地址:https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/ 翻译:杨晓东 ...
- UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?
选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软 ...
随机推荐
- 20145209 2016-2017-2 《Java程序设计》第7周学习总结
20145209 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 read()每次读入一个字节. eg:short2个字节,2=0x0201,读入后要0x & ...
- MySQL练习-主外键多表查询
练习: 1.建立表关系: 请创建如下表,并创建相关约束 USE db1; CREATE TABLE class( cid INT AUTO_INCREMENT PRIMARY KEY, caption ...
- 【译】第九篇 Integration Services:控制流任务错误
本篇文章是Integration Services系列的第九篇,详细内容请参考原文. 简介在前面三篇文章,我们创建了一个新的SSIS包,学习了脚本任务和优先约束,并检查包的MaxConcurrentE ...
- http、https 等 常用默认端口号
⑴. HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080⑵. SOCKS代理协议服务器常用端口号:1080⑶. FTP(文件传输)协议代理服务器常用端口号:21⑷. Tel ...
- 使用Picker的时候,让input输入框使用焦点,手机键盘不弹出
$("#address").click(function(){ document.activeElement.blur(); })
- java中Cookie使用问题(message:invalid character [32] was present in the Cookie value)
1. 问题描述 Servlet中执行下面一段代码: public void doGet(HttpServletRequest request, HttpServletResponse response ...
- php CI框架
CodeIgniter 是一个小巧但功能强大的 PHP 框架,作为一个简单而“优雅”的工具包,它可以为 PHP 程序员建立功能完善的 Web 应用程序.如果你是一个使用共享主机,并且为客户所要求的期限 ...
- docker centos:latest 使用 sshd
一.术语 1.容器 很多用户在接触Docker 之初都会认为容器就是一种轻量级的虚拟机,但实际上,容器和虚拟机有非常大的区别.从根本形态上来看,容器其实就是运行在操作系统上的一个进程,只不过加入了对资 ...
- SQLAlchemy-介绍安装
一:概述 SQLAlchemy的SQL工具包和对象关系映射是一个全面的工具集,用来处理数据库和Python. 它有几个不同的功能领域,可以单独使用或组合使用. 所示的主要组件,组件依赖关系组织成层: ...
- keras LSTM中间的dropout
TM有三个 model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2)) 第一个dropout是x和hidden之间的dropout,第二个是hid ...