配置EF Core的DbContext

配置创建的 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>>();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值