我正在尝试将迁移添加到DbContext,
add-migration initial -verbose
我遇到错误
尚未为此DbContext配置数据库提供程序。一种 可以通过重写DbContext.OnConfiguring来配置提供程序 方法或通过在应用程序服务提供程序上使用AddDbContext。 如果使用AddDbContext,则还要确保您的DbContext类型 在其构造函数中接受DbContextOptions对象,并 将其传递给DbContext的基本构造函数。
我的解决方案中有两个.netcore类库项目和和,netcore单元测试项目
这是我的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
}
}
答案 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);
}
}