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

最新文章

  1. mac PHP配置
  2. Sql-Server应用程序的高级注入
  3. mysql优化--触发器和auto_increment
  4. 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性
  5. 【转】MAC使用adb工具
  6. java Swing图形化界面
  7. bzoj2506
  8. android94 样式和主题
  9. 取出当前会话的sid等
  10. Animator Override Controllers 学习及性能测试
  11. android之View的启动过程
  12. SpringMVC从Control中响应json数据
  13. Oracle SQL Lesson (9) - 操作数据(增删改)
  14. java拦截处理System.exit(0)
  15. Ubuntu 16.04下使用Eclipse:创建工程时卡死的解决方法
  16. [MySQL] INFORMATION_SCHEMA 数据库包含所有表的字段
  17. TortoiseSVN 忽略文件 忽略已提交文件
  18. JAVA锁的优化和膨胀过程
  19. c# group by list
  20. 动态规划--电路布线(circuit layout)

热门文章

  1. 【leetcode 简单】 第九十九题 字符串相加
  2. pytorch梯度裁剪(Clipping Gradient):torch.nn.utils.clip_grad_norm
  3. 加密文件之Java改进版
  4. aarch64_g2
  5. 六、springcloud之配置中心Config
  6. 转载: Android开源库V - Layout:淘宝、天猫都在用的UI框架,赶紧用起来吧!
  7. Qt软件打包发布(QT5.4.1(msvc2013_64_opengl),Win7 64bit)
  8. 33 Introducing the Go Race Detector
  9. ansible的几点记录
  10. Linux下配置Samba服务器全过程