直接实例化Npgsql.EntityFrameworkCore.PostgreSQL的DbContext

Instantiate Npgsql.EntityFrameworkCore.PostgreSQL's DbContext directly

我使用 Npgsql.EntityFrameworkCore.PostgreSQL 创建了一个 EF Core DbContext。我想在单元测试项目的测试用例中实例化此 DbContext。不是为了创建实际的单元测试,而是为了试验使用此 DbContext 操作 postgresql 数据库。

因为这不是 ASP.NET 核心项目,所以没有依赖注入,也没有 AddEntityFrameworkNpgsql / AddDbContext 扩展方法。

我已经检查了 documentation,找不到这样做的例子。

那么,如何直接实例化这个 DbContext?

原来可以在这里使用 UseNpgsql 扩展方法:

using Xunit;
using Microsoft.EntityFrameworkCore;
using System.Linq;

namespace MyTestProject
{
    public class DbContextTest
    {
        [Fact]
        public void ActualQuery()
        {
            var optionsBuilder = new DbContextOptionsBuilder<MyDbContext>()
                .UseNpgsql("Host=mypgsvr;Database=mydb;Username=myusr;Password=mypass");
            var SUT = new MyDbContext(optionsBuilder.Options);

            var firstRow = SUT.mytable.First();

            Assert.NotNull(firstRow);
        }
    }
}

执行此操作的标准方法是在 DbContext 上简单地设置一个接受连接字符串的构造函数,或一个无参数构造函数并在内部执行连接字符串查找(例如通过 Microsoft.Extension.Configuration)。使用 DbContextOptionsBuilder 对于这种用途来说是不必要的繁重。

参见 the EF Core docs for regular .NET Core applications,而不是 ASP.NET 通常使用依赖注入的应用程序。