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

时间:2019-08-25 14:20:38

标签: c# entity-framework-core npgsql

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

由于这不是一个ASP.NET Core项目,因此没有依赖项注入,也没有AddEntityFrameworkNpgsql / AddDbContext扩展方法。

我已经检查了documentation,找不到示例。

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

2 个答案:

答案 0 :(得分:0)

原来可以在这里使用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);
        }
    }
}

答案 1 :(得分:0)

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

请参见the EF Core docs for regular .NET Core applications,与通常使用依赖项注入的ASP.NET应用程序相反。