c# - 错误“无法创建 'ApplicationDbContext' 类型的对象。”
问题描述
我正在使用 Npgsql 和实体框架。我正在尝试进行新的迁移,但问题标题中出现错误。我已经尝试过MS 文档中的示例。
所以,我的代码是:
public class Program
{
public static void Main(string[] args)
=> CreateHostBuilder(args).Build().Run();
// EF Core uses this method at design time to access the DbContext
public static IHostBuilder CreateHostBuilder(string[] args)
=> Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(
webBuilder => webBuilder.UseStartup<Startup>());
}
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseNpgsql(Configuration.GetConnectionString("LalalaDb")));
}
}
问题出在哪里?我如何进行迁移?
更新
这是我的ApplicationDbContext.cs
:
public class ApplicationDbContext : IdentityDbContext
{
private readonly string _connectionString;
public DbSet<Customer> Customers { get; set; }
// and more DbSets are here ...
public ApplicationDbContext(IConfiguration configuration)
{
_connectionString = configuration.GetConnectionString("LalalaDb");
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql(_connectionString, b => b.MigrationsAssembly("EntityFrameworkProject"));
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
解决方案
您可能需要查看用于构建您自己的 DbContext 类的文档和 DbContext Creation的文档,以了解一些其他注意事项/最佳实践。
我注意到的第一件事是您的上下文类不包含无参数构造函数或接受DbContextOptions<T>
实例的构造函数,这可能是无法创建迁移的原因。
public class ApplicationDbContext : IdentityDbContext
{
private readonly string _connectionString;
public DbSet<Customer> Customers { get; set; }
// and more DbSets are here ...
public ApplicationDbContext() : base()
{ }
public ApplicationDbContext(IConfiguration configuration)
{
_connectionString = configuration.GetConnectionString("LalalaDb");
}
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{ }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql(_connectionString, b => b.MigrationsAssembly("EntityFrameworkProject"));
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
推荐阅读
- javascript - 使用本地存储在 2 个样式表(一个切换)之间切换
- python - 在 Python 中使用缓冲区写入文件
- macos - 如何为 mac 安装程序传递参数
- swift - 更新我的 Xcode 11 和 iOS 13 后,firebase 文本检测不起作用
- python - AWS SAM 本地调试是否收费?
- reactjs - 'npx create-react-app' 不起作用(缺少依赖项)
- regex - 正则表达式以逗号分隔,除非在方括号内 - 忽略嵌套的方括号
- postgresql - Postgres 已卸载,但 psql --version 仍显示结果
- java - 使用 SQL Server Always On 配置的大量 jdbc 连接
- python - 如何在 selenium python 中断言值相等?