设计时 DbContext 配置

EF Core 设计时工具如迁移需要能够发现和创建的工作实例DbContext以收集有关应用程序的实体类型以及它们如何映射到数据库架构的详细信息的类型。 此过程可以为自动,只要该工具可以轻松地创建DbContext,会将其配置同样到它如何将配置在运行时的方式。

尽管提供了必要的配置信息到任何模式DbContext可在运行时,需要使用的工具DbContext在设计时仅适用于有限数量的模式。 这些内容中更详细地介绍设计时上下文创建部分。

配置 DbContextOptions

DbContext 必须具有的实例DbContextOptions才能执行任何工作。 DbContextOptions实例执行的配置信息如:

  • 数据库提供程序,若要使用,通常选择通过调用的方法,如UseSqlServerUseSqlite。 这些扩展方法需要相应的提供程序包,如Microsoft.EntityFrameworkCore.SqlServerMicrosoft.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的更多相关文章

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

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

  2. Entity Framework Core系列之DbContext

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

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

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

  4. Entity Framework Core系列之DbContext(添加)

    上一篇我们介绍了Entity Framework Core系列之DbContext,对DbContext有了概念上的了解,这篇将介绍DbContext添加数据 通过DbContext添加实体的主要方法 ...

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

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

  6. .Net Entity Framework Core 用 HasColumnType 配置浮点数精度

    一.前言 前段时间用.Net Entity Framework core搭建框架,需要配置浮点数的精度,发现.Net Entity Framework core 并没有HasPrecision方法.在 ...

  7. ASP.NET Core 配置 Entity Framework Core - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 配置 Entity Framework Core - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 Entity Fram ...

  8. Entity Framework Core 1.1 升级通告

    原文地址:https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/ 翻译:杨晓东 ...

  9. UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?

    选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软 ...

随机推荐

  1. HTML5新增的本地存储功能(笔记)

    HTML5新增的本地存储功能分为两种,分别对应两个JS对象:①本地存储对应localStorage对象,主要用于长期保存整个网站的数据(这些数据可以永久保存在客户端电脑硬盘内).②会话存储对应sess ...

  2. vue开发者工具vue-devtools-4.1.4_0.crx谷歌插件下载及安装

    网盘地址: https://pan.baidu.com/s/14PoaihUHQZEJtiHNWUmdjg 下载好后 谷歌浏览器中扩展程序,开启开发者模式,将下载的文件拖到窗口中即可 然后重启浏览器 ...

  3. 2016.5.16——leetcode:Reverse Bits(超详细讲解)

    leetcode:Reverse Bits 本题目收获 移位(<<  >>), 或(|),与(&)计算的妙用 题目: Reverse bits of a given 3 ...

  4. NTC热敏电阻认识及功率型热敏电阻选型

    -------------------记公司一款已经量产的产品,在最新加工的批次上出现:刚上电就炸毁功率型热敏电阻的问题------------------------- ************写在 ...

  5. YUV422(UYVY)转RGB565源代码及其讲解.md

    目录 前言 源码 代码分析 YUV三个分量的关系 循环遍历 结束语 前言 使用zmm220核心板,IFACE102版本的内核等,4300型号的LCD,XC7011_SC1145摄像头,亲测有效. 本文 ...

  6. trace spring

    package xx.com.aspect; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotati ...

  7. sicily 1215. 脱离地牢

    Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想得到这两块石头了,只要把 ...

  8. vue项目中遇到的一些问题

    或访问:https://github.com/littleHiuman/experiences-about-vue  欢迎补充! vuex 状态 vue-cli 命令行 vue vue vue-rou ...

  9. 一篇文章读懂开源web引擎Crosswalk-《转载》

    前言 Web技术的优势早已被广大应用开发者熟知,比如可与云服务轻松集成,基于响应式UI设计的精美布局,高度的开放性,跨平台能力, 高效的分发与部署等等.伴随着移动互联网的快速发展与HTML5技术的逐步 ...

  10. java多线程-读写锁原理

    Java5 在 java.util.concurrent 包中已经包含了读写锁.尽管如此,我们还是应该了解其实现背后的原理. 读/写锁的 Java 实现(Read / Write Lock Java ...