C# 无法创建类型为';ApplicationDbContext';。用于设计时支持的不同模式
在.net core中添加数据库迁移时,我面临以下错误 这就是错误: 这是C# 无法创建类型为';ApplicationDbContext';。用于设计时支持的不同模式,c#,asp.net-core,.net-core,.net-core-3.0,.net-core-3.1,C#,Asp.net Core,.net Core,.net Core 3.0,.net Core 3.1,在.net core中添加数据库迁移时,我面临以下错误 这就是错误: 这是启动中的代码: public void配置服务(IServiceCollection服务) { services.AddDbContext(选项=> options.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”)); services.AddDefaultIdentity().AddEntityFrameworkStores(); s
启动
中的代码:
public void配置服务(IServiceCollection服务)
{
services.AddDbContext(选项=>
options.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”));
services.AddDefaultIdentity().AddEntityFrameworkStores();
services.AddControllers();
}
这是ApplicationDbContext
类:
public类ApplicationDbContext:IdentityDbContext
{
公共应用程序DBContext(DbContextOptions选项):基本(选项)
{ }
公共数据库集应用程序用户{get;set;}
}
这是应用程序用户
:
公共类应用程序用户:IdentityUser
{
[必需]
[列(TypeName=“nvarchar(150)”)]
公共字符串UserFName{get;set;}
[必需]
公共字符串UserLName{get;set;}
}
看来你是错的,你的继承权是错的
public ApplicationDbContext : IdentityDbContext
应该是
public ApplicationDbContext : IdentityDbContext<ApplicationUser>
public ApplicationDbContext:IdentityDbContext
或
public ApplicationDbContext:IdentityDbContext
如果您还扩展了角色类
当您希望使用扩展用户类(而不是
IdentityUser
)创建上下文时,虽然OP面临的问题似乎是由于不正确地使用了AspNet Identity提供的基类,但通常在设计时无法创建ApplicationDbContext实例时会遇到此错误。有两种解决方案。其中之一是在StartUp类的ConfigureServices方法中指定ApplicationDbContext提供程序:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options => {
options.UseSqlServer(Configuration.GetConnectionString("MyConnection"));
});
}
public void配置服务(IServiceCollection服务)
{
services.AddDbContext我发现导致此错误的原因可能是代码中的多个方面。至少对我来说,最好的方法是在命令中添加verbose
这样,您就可以了解问题所在。verbose
将显示执行的所有步骤
在visual studio中使用:
add-migration Added_something -verbose
对于CLI使用:
dotnet ef migrations add Added_something --verbose
我得到了同样的错误…除了代码在几分钟前工作正常。
我正在用Fluent API
我有三个项目:WebApp、DataAccess库和模型库
在尝试了几次不成功的迁移之后,我最终做了一个Build->Clean Solution
,并在WebApp上做了一个Build。
每件事都重新开始工作…我无法重新创建错误。如果选择了多个启动项目,也会发生此错误。我将我的webproject设置为startup project,这为我解决了问题。我在startup.cs中忘记执行此操作时遇到此错误,希望对某人有所帮助:)
services.AddTransient();
如果从.net core应用程序的Program.cs中删除静态IHostBuilder CreateHostBuilder(字符串[]args)
方法,也会发生此错误。(这是我的案例)此错误发生在我身上,但同时我在访问Microsoft.Extensions.Hosting服务时也发生了一个错误。在没有应用程序服务提供商的情况下继续。错误:无法解析JSON文件。
修复我的
appsettings.json
文件解决了这个问题。我也有同样的错误,只需修改程序类.Net Core 3.0
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
publicstaticvoidmain(字符串[]args)
{
CreateHostBuilder(args.Build().Run();
}
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
});
到
publicstaticvoidmain(字符串[]args)
{
BuildWebHost(args.Run();
}
公共静态IWebHost BuildWebHost(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.Build();
从azure管道任务运行dot-net ef migrations脚本命令时,我遇到了相同的问题。我添加了“-project”参数。但仍然失败。
添加“-startup project”参数对我很有效。
我想即使我们在project中指定了startup类,为了让ef工具找到一个,我们也必须明确地提到它们。我的问题通过安装
Microsoft.EntityFrameworkCore.Design
nuget软件包得到了解决
实体框架核心工具需要此软件包才能工作。请确保您的启动项目正确无误。然后安装该软件包
在项目中的Build->Clean Solution结束时,再次尝试运行命令
添加迁移命令cli:
dotnet ef migrations add InitDatabase --project YourDataProjectName -s YourWebProjectName -c YourDbContextName --verbose
dotnet ef database update InitDatabase --project YourDataProjectName -s YourWebProjectName -c YourDbContextName --verbose
更新数据库命令cli:
dotnet ef migrations add InitDatabase --project YourDataProjectName -s YourWebProjectName -c YourDbContextName --verbose
dotnet ef database update InitDatabase --project YourDataProjectName -s YourWebProjectName -c YourDbContextName --verbose
我今天在运行
dotnet ef migrations add
我有三个项目,MainApp(Web)、带有DBContext的C#项目和用于模型的C#项目
我能够从CLI中解决它
dotnet ef migrations add AddCategoryTableToDb -s MainApp -p ProjectHavingDbContext
当我的DbContext有两个构造函数时,我也遇到了同样的错误。在重新排列构造函数之后,将其排序为类中的第一个无参数构造函数,从而修复了它
public ProgramDbContext() : base()
{
}
public ProgramDbContext(DbContextOptions<ProgramDbContext> options) : base(options)
{
}
publicprogramdbcontext():base()
{
}
公共编程DBContext(DbContextOptions):基本(选项)
{
}
这一定是动态DbContext对象调用的结果,这里正在播放反射。我发现我丢失了:
Microsoft.EntityFrameworkCore.Tool
Microsoft.EntityFrameworkCore.Design
我有多个启动项目(不同的API)。
我在PM控制台中处于不同的级别。
然后我了解到我必须关闭SQL管理,这样我才能
public ProgramDbContext() : base()
{
}
public ProgramDbContext(DbContextOptions<ProgramDbContext> options) : base(options)
{
}
dotnet ef migrations add YourMigrationName --verbose