2

我创建了新的ASP.NET Core项目,其标识为Individual User但它没有创建任何数据库。我需要手动使用add-migrationupdate-databaseASP.NET核心新项目默认情况下不创建数据库

我记得,过去一切都是自动完成的。不知道这次有什么不对。

VS2017.3

+0

分享您的代码以获得更好的帮助。@Wakka Sakka –

+0

[EntityFramework Core自动迁移]的可能重复(https://stackoverflow.com/questions/39526595/entityframework-core-automatic-migrations) – CodeCaster

+0

没有额外的代码。我只是创建新的aspnet核心1.1项目有一个迁移文件夹,但在服务器资源管理器是没有任何数据库。我必须'手动更新数据库' –

回答

0

根据DOTNET核心的版本,你有,ASP.NET核心可能无法自动当您创建一个新的应用程序为您创建一个数据库。

但是,简单地迁移和更新数据库应该可以工作。 首先,创建一个语法为dotnet ef migrations add <MIGRATION_NAME>的新迁移。像这样

dotnet ef migrations add InitialMigration

,然后更新,像这样

dotnet ef database update 数据库。

这应该可以做到。

0

您必须触发它才能自动迁移您的数据库。与以前版本的ASP.NET MVC不同,this isn't implemented out of the box

,这是可以实现的一种方式,但是,从你的startup.cs触发它,或者某处管道像这样别人早:

using (var context = new MyDbContext(..)) 
{ 
    context.Database.Migrate(); 
} 
1

如果你只想创建一个数据库模式,你可致电:

//IDbContext context; 
context.Database.EnsureCreated(); 

But note, that

EnsureCreated完全绕过迁移并为您创建模式,但不能将其与迁移混合使用。 EnsureCreated专为测试或快速原型设计而设计,您可以随时丢弃和重新创建数据库。如果您正在使用迁移并希望将它们自动应用于应用程序启动,则可以使用context.Database.Migrate()代替。

+0

[这打破了迁移](https://stackoverflow.com/questions/38238043/how-and-where-to-call-database-ensurecreated-and-database-migrate)。 – CodeCaster

0

要启用自动迁移,你需要把它添加到您的配置:

public class MigrateDBConfiguration : System.Data.Entity.Migrations.DbMigrationsConfiguration<DbContext> 
{ 
public MigrateDBConfiguration() 
{ 
    AutomaticMigrationsEnabled = true; 
    AutomaticMigrationDataLossAllowed = true; 
} 
} 

要启用自动更新到你的数据库,你需要添加Database.SetInitializer(...)在OnModelCreating()方法在您的上下文中:

public class MyContext : DbContext 
{ 
protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, MigrateDBConfiguration>()); 
} 

... 
} 

您还可以使用Fluent migration自动进行数据库更新和迁移。
下面是关于如何从Here使用它的一个例子:

using FluentMigrator; 
namespace DatabaseMigration.Migrations 
{ 
    [Migration(1)] 
    public class M0001_CreateMemberTable:Migration 
    { 
     public override void Up() 
     { 
      Create.Table("Member") 
       .WithColumn("MemberId").AsInt32().PrimaryKey().Identity() 
       .WithColumn("Name").AsString(50) 
       .WithColumn("Address").AsString() 
       .WithColumn("MobileNo").AsString(10); 
     } 

     public override void Down() 
     { 
      Delete.Table("Member"); 
     } 
    } 
} 
+0

我有一种感觉,这个答案是Asp.NET MVC,而不是ASP.NET Core?我不认为ASP.NET Core具有'AutomaticMigrationsEnabled' – Luke

相关问题