配置创建的 DbContext

这篇文章演示用于配置基本模式DbContext通过DbContextOptions连接到使用特定的 EF Core提供程序和可选行为的数据库。

设计时 DbContext 配置

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

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

配置 DbContextOptions

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

  • 数据库提供程序,若要使用,通常选择通过调用方法,如UseSqlServerUseSqlite
  • 任何必要的连接字符串或数据库实例中,标识符通常作为参数传递给上述提供程序选择方法
  • 任何提供程序级别的可选行为的选择器,通常还链接到提供程序选择方法的调用中
  • 任何常规 EF Core行为选择器,通常链接之后或之前提供程序选择器方法

下面的示例将配置DbContextOptions若要使用 SQL Server 提供程序,在连接包含connectionString变量、 提供程序级别的命令超时,以及可使在中执行的所有查询 EF Core行为选择器DbContext否跟踪默认情况下:

optionsBuilder.UseSqlServer(connectionString, providerOptions=>providerOptions.CommandTimeout(60)).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>>();

配置EF Core的DbContext相关推荐

  1. EF Core之DBContext生命周期

    EF Core之DBContext生命周期 DBContext是EF Core的核心,.Net Core WebApi开发的时候,绝大多数的场景下,我们只需要一个Scoped的DBContext即可, ...

  2. EF Core上下文DbContext相关配置和生命周期

    一. 配置相关 1. 数据库连接字符串的写法 (1).账号密码:Server=localhost;Database=EFDB01;User ID=sa;Password=123456; (2).win ...

  3. ABP Vnext 4.4:统一Ef Core的DbContext/移除EF Core Migrations项目

    Abp vnext 4.4出现了一个比较重大的变更:在Startup template中移除了EF Core Migrations项目,本文翻译自community.abp.io/articl 由于本 ...

  4. EF Core的学习之路01

    本文章是我听B站杨中科的所做的笔记 杨中科B站视频链接:.NET 6教程,.Net Core 2022视频教程,杨中科主讲_哔哩哔哩_bilibili 什么时ORM 1.说明:本课程需要你有数据库.S ...

  5. [翻译 EF Core in Action 1.8] MyFirstEfCoreApp应用程序设置

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

  6. EF Core 6 简化的数据库上下文注册

    EF Core 6 简化的数据库上下文注册 Intro EF Core 6 将简化现在的服务注册,DbContext 的服务注册将会更简单一些 Sample 直接来看示例代码吧: 现在我们注册 EF ...

  7. efcore 实体配置_快速掌握EF Core使用技能

    EF Core 基础概念 概念 EF Core 全称是Entity Framework Core,可使用 EF Core 开发面向 .NET Core 的应用,EF Core 同时支持在 Visual ...

  8. java EF6,EF Core 2.0和EF6(Entity Framework 6)中配置实体映射关系

    1.EF6中通过EntityTypeConfiguration配置实体映射关系代码 public class AccountMap : EntityTypeConfiguration { public ...

  9. efcore 实体配置_.NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记...

    2.4.3 EF Core -- 基础与配置连接字符串 异步编程 日志 DbContext池 类和配置表 属性和列配置 并发token 索引 连接字符串 在 http://ASP.NET Core 配 ...

最新文章

  1. 开源 免费 java CMS - FreeCMS1.5-信息管理
  2. 海量无序数据寻找第 K 大的数
  3. python可以修图吗_会照片处理的不只是ps,还有Python!
  4. 1007 素数对猜想 (20 分)(c语言)
  5. UVa 10603 Fill (BFS+优先队列)
  6. php文件锁解锁是删除对应的文件_软件 | 文件解锁强制删除工具 Wise Force Deleter v1.49...
  7. linux 64位 寻址空间_Ubuntu 20.04(64位)如何配置gcc-3.4用于编译linux-0.11
  8. HuggingFace又出炼丹神器!稀疏矩阵运算进入平民化时代!
  9. OpenCV案例(四): 投射矫正
  10. 【前端】ACE Editor(代码编辑器) 简易使用示例
  11. 计算机二级Java笔记/重难点易错点总结(按章节归纳整理)
  12. python个税计算器代码_用python实现个税计算器
  13. 北京大学计算机学院复试名单2021,北京大学2021拟录取推免研究生毕业院校统计,多位来自非211高校...
  14. SpringBoot2核心技术-笔记
  15. hiberfil.sys文件删除
  16. 如何申请注册163邮箱账号?
  17. Windows 下编译 EXE 文件时把一个外部 txt 文件编译到 EXE 里面
  18. 张超 计算机 清华 论文,张超-清华大学航天航空学院
  19. 解决MySQL远程过程调用失败
  20. android自定义View之margin和padding的处理

热门文章

  1. 量化交易之HFT篇 - 高频做市模型源码(.h文件)
  2. python 遍历List各种方式
  3. 【《深度学习入门》—— 学习笔记(一)】
  4. 【idm】idm突破cookie封锁 (解决http:1.1 403 forbidden)(附charles使用教程)
  5. 了解模型预测控制4--自适应,增益调度和非线性MPC
  6. 最近发现的一个学习宝库
  7. 12、Storage(存储)(基础知识)
  8. 在腾讯这一年,坚守初心持续单纯!
  9. 怎么防止解决百度转码问题
  10. WPS表格-快速展开全部隐藏行