我创建了一个asp.net核心项目我选择了UseIndiviualUserAccount作为我的AutenticationType, 在通过visual studio准备项目后,我得到了一些预建的类和控制器, 显然我有迁移文件夹及其配置,因为我不想使用asp.net核心的defulat结构,我删除了迁移文件夹,我创建了一个新的类库,我将它重命名为MyProject.Core。 在MyProject.Core类库中我创建了我的数据库模型和dbContext类,所以我需要运行add-migration" init"用于创建我的数据库的命令,所以我做了,但我得到以下错误, 注意:我正在PMC中的Myproject.Core中运行add migration命令! 无法创建' ApplicationDbContext'类型的对象。添加' IDesignTimeDbContextFactory'的实现到项目,或参见https://go.microsoft.com/fwlink/?linkid=851728了解设计时支持的其他模式。
我如何修复此错误,我在当前网站和其他网站上阅读了一些文章,但我无法解决我的问题。
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IUnitOfWork, UnitOfWork>();
services.AddTransient<IProvinceRepository, ProvinceRepository>();
services.AddTransient<IBrandRepository, BrandRepository>();
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// Add application services.
services.AddTransient<IEmailSender, EmailSender>();
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser,ApplicationRole,string>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options): base(options)
{
}
static ApplicationDbContext()
{
// Set the database intializer which is run once during application start
// This seeds the database with admin user credentials and admin role
// Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
}
答案 0 :(得分:3)
当EF不知道您的应用程序的入口点在哪里时,就会发生这种情况。如果您使用IDesignTimeDbContextFactory
,不需要实施BuildWebHost
。
首先,确保从包含迁移的项目中运行迁移。
例如......如果你正在使用Package Manager Console
:
cd .\MyProject.Core
然后使用startup-project
运行迁移,并使用BuildWebHost
将其指向项目。
dotnet ef --startup-project ../MyProject.Web/ migrations add Initial
否则EF将不知道您的实施位置。