Entity Framework Core(3)-配置DbContext

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 设计时 DbContext 配置EF Core 设计时工具如迁移需要能够发现和创建的工作实例DbContext以收集有关应用程序的实体类型以及它们如何映射到数据库架构的详细信息的类型。 此过程可以为自动,只要该工具可以轻松地创建DbContext,会将其配置同样到它如何将配置在运行时的方式。

设计时 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(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>>();

 

LouieGuo
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
XML 存储 数据库连接
Entity Framework学习笔记——edmx文件
上文简单介绍了一下Entity FrameWork,这里说一下EF的核心——edmx文件。 在VisualStudio中建立edmx文件(此例环境为VisualStudio2012)
Entity Framework学习笔记——edmx文件
|
6月前
|
SQL 开发框架 缓存
【Entity Framework】 EF中DbContext类详解
【Entity Framework】 EF中DbContext类详解
216 0
|
数据库
Entity Framework Core介绍(1)
介绍 Entity Framework (EF) Core 是轻量化、可扩展和跨平台版的常用 Entity Framework 数据访问技术。 EF Core 可用作对象关系映射程序 (O/RM),以便于 .NET 开发人员能够使用 .NET 对象来处理数据库,这样就不必经常编写大部分数据访问代码了。
1033 0
|
存储 开发框架 .NET
Entity Framework基础01
Entity Framework基础01
209 0
Entity Framework基础01
|
SQL 数据库
Entity Framework 小知识(二)
Entity Framework 小知识(二)
186 0
|
索引
Entity Framework 小知识(四)
Entity Framework 小知识(四)
147 0
|
数据库 数据库管理
Entity Framework 小知识(一)
Entity Framework 小知识(一)
141 0
|
数据库
Entity Framework 小知识(三)
Entity Framework 小知识(三)
158 0
|
数据库
Entity Framework 小知识(五)
Entity Framework 小知识(五)
145 0
|
SQL .NET 数据库
Entity Framework Core 2.0 入门
该文章比较基础, 不多说废话了, 直接切入正题. 该文分以下几点: 创建Model和数据库 使用Model与数据库交互 查询和保存关联数据 EF Core支持情况 EF Core的数据库Providers: 此外还即将支持CosmosDB和 Oracle.
1691 0