add-Migration 错误没有为此 DbContext 配置数据库提供程序
Posted
技术标签:
【中文标题】add-Migration 错误没有为此 DbContext 配置数据库提供程序【英文标题】:add-Migration Error No database provider has been configured for this DbContext 【发布时间】:2019-03-25 16:57:50 【问题描述】:我正在尝试将迁移添加到 DbContext ,
add-migration initial -verbose
我得到错误
没有为此 DbContext 配置数据库提供程序。一种 可以通过覆盖 DbContext.OnConfiguring 来配置提供程序 方法或通过在应用程序服务提供者上使用 AddDbContext。 如果使用了 AddDbContext,那么还要确保你的 DbContext 类型 在其构造函数中接受一个 DbContextOptions 对象,并且 将其传递给 DbContext 的基本构造函数。
我的解决方案中有两个 .netcore 类库项目和 ,netcore 单元测试项目
-
域(Poco Classess)
存储库(.Net Core 2.1,EntitiFrameworkCore 2.1.4)
存储库测试
这是我的 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
【问题讨论】:
好吧,您似乎没有像错误消息告诉您的那样配置 DbContext。你的上下文配置在哪里? @CamiloTerevinto 它在我的测试项目中。我只是更新代码 问题到底有什么问题?你为什么投反对票?add-migration
命令不知道您的单元测试,因此对于该命令,您还没有配置上下文。解决此问题的最简单方法是覆盖 OnConfiguring
并配置上下文(如果尚未发生)(就像在您的测试中发生的那样)
@CamiloTerevinto 我应该在我的测试项目中这样做吗?
【参考方案1】:
在测试项目中创建一个实现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);
【讨论】:
太棒了!比使用一次性控制台应用程序要好得多。在 .net core 中,我从我的上下文项目目录中运行了dotnet ef migrations add InitialCreate --startup-project <myTestProject>
,一切运行良好。非常感谢。以上是关于add-Migration 错误没有为此 DbContext 配置数据库提供程序的主要内容,如果未能解决你的问题,请参考以下文章
EF Core 迁移错误:PositionalParameterNotFound,Add-Migration