add-Migration错误尚未为此DbContext配置数据库提供程序

时间:2018-10-21 12:42:22

标签: c# entity-framework ef-core-2.1

我正在尝试将迁移添加到DbContext,

add-migration initial -verbose

我遇到错误

  

尚未为此DbContext配置数据库提供程序。一种   可以通过重写DbContext.OnConfiguring来配置提供程序   方法或通过在应用程序服务提供程序上使用AddDbContext。   如果使用AddDbContext,则还要确保您的DbContext类型   在其构造函数中接受DbContextOptions对象,并   将其传递给DbContext的基本构造函数。

我的解决方案中有两个.netcore类库项目和和,netcore单元测试项目

  1. 域(Poco Classess)
  2. 存储库(.Net Core 2.1,EntitiFrameworkCore 2.1.4)
  3. RepositoryTest

这是我的DataContext类

 public class DataContext:DbContext
    {
        public DataContext(DbContextOptions<DataContext> option) : base(option)
        {

        }

        public DataContext()
        {

        }

    public DbSet<User> User { get; set; }
    public DbSet<Cart> Cart { get; set; }
    public DbSet<CatalogItem> CatalogItem { get; set; }
 }

具有DbContextOptions对象的构造函数已经存在。

可能是什么问题?

这是测试项目中的一类。

 public class CustomerRepositoryIntegrationTest
    {
        [Fact]
        public void should_add_customer()
        {
            //Arrange
            var option = new DbContextOptionsBuilder<DataContext>()
            .UseSqlServer(@"Data Source=(LocalDb)\MSSQLLocalDB;Database=ecommerce;Integrated Security=SSPI").Options;

            //Act
            using (DataContext dataConext = new DataContext(option))
            {

                dataConext.Database.Migrate();
                customer actual = new Customer()
                dataConext.Customer.Add(actual);
                dataConext.SaveChanges();

                var expected = dataConext.Customer.FirstOrDefault();

                //Assert
                expected.Should().BeEquivalentTo(expected);
            }


            //Assert
        }
    }

1 个答案:

答案 0 :(得分:3)

创建一个在测试项目中实现IDesignTimeDbContextFactory的类,并将测试项目设置为启动项目

public class TemporaryDataContextFactory : IDesignTimeDbContextFactory<DataContext>
{
    public DataContext CreateDbContext(string[] args)
    {
        var option = new DbContextOptionsBuilder<DataContext>()
        .UseSqlServer(@"Data Source=(LocalDb)\MSSQLLocalDB;Database=IbReport;Integrated Security=SSPI").Options;
        return new DataContext(option);
    }
}