【问题标题】:Creating the Database Context definition创建数据库上下文定义
【发布时间】:2018-09-05 10:14:03
【问题描述】:

这是根据“Pro ASP.NET Core MVC 2”一书,Adam Freeman 声明数据库上下文的方法。 这个参数是什么意思:

DbContextOptions<ApplicationDbContext> options : base(options) { }

试图理解声明 DBContext 的选项。

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.DependencyInjection;

namespace SportsStore.Models 
{
     public class ApplicationDbContext : DbContext
     {
         public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options): 
             base(options) 
         {
         }

         public DbSet<Product> Products { get; set; }
     }
}

【问题讨论】:

  • 是的,就像许多 msdn 文档一样令人困惑和不清楚

标签: c# asp.net-core asp.net-core-mvc entity-framework-core dbcontext


【解决方案1】:

您有一个从DbContext 继承的ApplicationDbContext,就像每个数据库上下文都必须这样做一样。它在代码中表示您将执行 CRUD 操作的数据库对象。因为您正在继承,所以您有可能调用执行初始化的基本构造函数 - 在这种情况下 - 初始化。在具体的DbContextOptions&lt;ApplicationDbContext&gt; 中,它可以不接受或接受一个DbContextOptions&lt;T&gt;DbContextOptions 类型的参数——这就是base(options) 调用。您可以在MS doc article base(C# Reference) 中找到更详细甚至更好的解释 您可以在GitHub - EntityFramework Core repository 上找到基类的实现。 (该链接引用了您在代码中调用的基本构造函数。)

DbContextOptions&lt;ApplicationDbContext&gt; 对象包括您在将其注入 ApplicationDbContext 之前可能已设置的配置。

更多详情来自MS docs article - Configuring DbContextOptions

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

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

一般DbContextOptions 是一个包含整个数据库上下文配置的容器。你可以定义例如如果它是 SQLin-memory 数据库以及更改跟踪行为。在已经提到的问题评论和我的回答中链接,MS doc article 将提供所需的信息和示例。

【讨论】:

    猜你喜欢
    • 2020-11-11
    • 1970-01-01
    • 2013-01-06
    • 2011-11-12
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    相关资源
    最近更新 更多