设计时 DbContext 配置

此过程可以为自动,只要该工具可以轻松地创建DbContext,会将其配置同样到它如何将配置在运行时的方式。

设计时上下文创建部分。

配置 DbContextOptions

DbContextOptions实例执行的配置信息如:

  • 中定义的方法Microsoft.EntityFrameworkCore命名空间。
  • 任何必要的连接字符串或标识符的数据库实例中,通常作为参数传递到上述提供程序选择方法
  • 任何提供程序级别的可选行为选择器,通常还链接到提供程序选择方法调用中
  • 任何常规 EF Core 行为选择器,通常链接之后或之前提供程序选择器方法

否跟踪默认情况下:

optionsBuilder
    .UseSqlServer(connectionString, providerOptions=>providerOptions.CommandTimeout(60))
    .UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);

 

备注

若要有权访问这些扩展方法,可能需要具有一个命名空间 (通常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

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>>();

 

相关文章:

  • 2022-12-23
  • 2021-12-08
  • 2021-07-30
  • 2022-12-23
  • 2022-12-23
  • 2021-10-31
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-03-05
  • 2021-11-26
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案