直接实例化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 通常使用依赖注入的应用程序。
我使用 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 通常使用依赖注入的应用程序。