C# Microsoft.EntityFrameworkCore.Sqlite(2.0.0 peview1最终版)迁移未创建表
我是实体框架新手,在DB中创建表时遇到问题 数据库创建得很好,但它不从实体创建表 以下是我的背景:C# Microsoft.EntityFrameworkCore.Sqlite(2.0.0 peview1最终版)迁移未创建表,c#,entity-framework,asp.net-core,entity-framework-core,C#,Entity Framework,Asp.net Core,Entity Framework Core,我是实体框架新手,在DB中创建表时遇到问题 数据库创建得很好,但它不从实体创建表 以下是我的背景: public class MyContext : DbContext { public MyContext(DbContextOptions<MyContext> options) : base(options) { } public MyContext() { } public DbSet<User> Users { get;
public class MyContext : DbContext
{
public MyContext(DbContextOptions<MyContext> options) : base(options) { }
public MyContext()
{
}
public DbSet<User> Users { get; set; }
}
这是我在Startup.cs中的代码
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
var context = serviceScope.ServiceProvider.GetRequiredService<MyContext>();
context.Database.Migrate();
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentityServiceAuthentication();
services.AddDbContext<MyContext>(options => options.UseSqlite(Configuration.GetConnectionString("SqlLiteConnection")));
services.AddMvc();
}
public void配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
使用(var serviceScope=app.ApplicationServices.GetService().CreateScope())
{
var context=serviceScope.ServiceProvider.GetRequiredService();
Migrate();
}
}
public void配置服务(IServiceCollection服务)
{
services.AddIdentityServiceAuthentication();
services.AddDbContext(options=>options.UseSqlite(Configuration.GetConnectionString(“SqlLiteConnection”));
services.AddMvc();
}
迁移创建数据库context.database.Migrate()代码>从文档中我很清楚这一点,但我就是不知道如何从实体中创建表
谢谢你的帮助
而且不确定它是否重要,我的类MyContext
是在类Libarry项目中定义的,而不是在web项目中定义的
编辑:
通过@borisdj answer,我发现我必须从Package manager运行以下命令:
添加迁移MyFirstMigration-Context MyContext-Project MyProject.Db
但我得到了这个错误:
尚未为此DbContext配置任何数据库提供程序。可以通过重写DbContext.OnConfigurang方法或在应用程序服务提供程序上使用AddDbContext来配置提供程序。如果使用AddDbContext,那么还要确保DbContext类型在其构造函数中接受DbContextOptions对象,并将其传递给DbContext的基本构造函数
正如您所看到的,我并没有覆盖DbContext.onconfigurang
,而是在Startup.cs
中使用AddDbContext
,正如您在上面所看到的,它有一个接受DbContextOptions
对象的构造函数,但我仍然得到这个错误
这可能是因为MyContext
是在类库项目中定义的,而不是在Web项目中定义的(Startup.cs所在的位置)您应该首先在Package Manager控制台中运行以下命令:
PM>添加迁移初始值
然后:
PM>更新数据库
如果应用程序中有多个DbContext-s,则需要指定DbContext名称:
PM>dd迁移初始-上下文MyContext-Project MyProject.Db
关于提供商的其他问题,您的应用程序中应包含以下元素:
appsettings.json
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=CoreTemplate;Trusted_Connection=True;MultipleActiveResultSets=true"
Startup.cs
services.AddDbContext<MyContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
public partial class My Context : DbContext
{
public CoreTemplateContext(DbContextOptions options) : base(options) { }
运行create migration Initial getting时出错:术语“create migration”未被识别为cmdlet的名称。。。。。我运行的是Microsoft.EntityFrameworkCore.Sqlite 2.0(预览版)和VS 2017My bad,它是“添加迁移”非常棒添加迁移初始帮助。只是我得到了一个错误,我有多个DbContext,所以我必须指定DbContex,就像添加迁移初始上下文MyContext一样。如果您有多个DbContext,请使用此附加解释更新您的答案,我将接受您的答案。感谢您的上下文位于类库中,您还需要指定启动项目
public partial class My Context : DbContext
{
public CoreTemplateContext(DbContextOptions options) : base(options) { }