我是Entity Framework的新手,在使用DB创建表时遇到了问题。
数据库创建正常但不会从实体创建表。
这是我的背景:
public class MyContext : DbContext
{
public MyContext(DbContextOptions<MyContext> options) : base(options) { }
public MyContext()
{
}
public DbSet<User> Users { get; set; }
}
这里是User
实体
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string UsernaName {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();
}
迁移创建数据库context.Database.Migrate();
我从文档中可以清楚地看到这一点,但我不知道如何从实体创建表。
感谢您的帮助。
不确定是否重要,我的班级MyContext
是在Class Libarry项目中定义的,而不是在Web项目中定义
修改
从@borisdj回答我发现我必须从包管理器运行此命令:
添加迁移MyFirstMigration -Context MyContext -Project MyProject.Db
但是我收到了这个错误:
没有为此DbContext配置数据库提供程序。可以通过覆盖DbContext.OnConfiguring方法或在应用程序服务提供程序上使用AddDbContext来配置提供程序。如果使用AddDbContext,那么还要确保您的DbContext类型在其构造函数中接受DbContextOptions对象,并将其传递给DbContext的基础构造函数。
正如您所看到的,我并未覆盖DbContext.OnConfiguring
,但我在AddDbContext
中使用Startup.cs
正如您在上面所看到的那样,并且拥有接受DbContextOptions<TContext>
对象的构造函数但我是仍然会收到此错误。
可能是因为MyContext
在类库项目中定义而不是在Web项目中(Startup.cs所在的位置)
答案 0 :(得分:2)
首先应在程序包管理器控制台中运行此命令:
PM&GT; add-migration初始
然后:
PM&GT;更新的数据库
如果App中有多个DbContext-s,则需要指定DbContext Name:
PM&GT; dd-migration Initial -Context 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")));
<强> MyContext.cs 强>
public partial class My Context : DbContext
{
public CoreTemplateContext(DbContextOptions options) : base(options) { }