【问题标题】:EF code first not creating the databaseEF代码首先不创建数据库
【发布时间】:2018-09-18 04:34:52
【问题描述】:

这是我的代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<AppDbContext>(options =>
    { 
     options.UseSqlServer(Configuration.GetConnectionString("AppDbContext"));
    });

    services.AddMvc();
}

这是我的 DbContext:

public class AppDbContext : DbContext
{       
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
    {

    }

    public DbSet<Actor> Actors { get; set; }
    public DbSet<Movie> Movies { get; set; }
    public DbSet<MovieActor> MovieActors { get; set; }

}

我的 ConnectionString 很好。我真的很想知道为什么我的数据库在我运行这段代码时没有生成?断点在services.AddDbContext 行中命中,但是当我在AppDbContext 中放置断点时,它没有命中。有人可以帮忙吗?我的代码看起来像这样https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

【问题讨论】:

标签: c# entity-framework asp.net-core ef-code-first ef-core-2.0


【解决方案1】:

这是第一次创建您的数据库(代码如下)。然而,迁移不同于创造。您可以查看链接(https://msdn.microsoft.com/en-us/library/jj591621(v=vs.113).aspx)。如果你想从你的代码管理 Db,DbMigrations 脚本的执行应该涉及你的部署管道,否则它没有多大用处。

还存在自动迁移(自动检测更改并在 db 上执行)(Entity Framework, Automatic apply Migrations)。但这并没有提供太大的灵活性,我不推荐用于生产。

public class AppDbContext : DbContext
{       
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
    {
        this.Database.EnsureCreated();
    }

public DbSet<Actor> Actors { get; set; }
..............

【讨论】:

  • this.Database.EnsureCreated();如果您决定以后不再修改数据库模式,或者您可以说此命令有助于确保在第一次创建数据库时,这很有用。
【解决方案2】:

您可以使用迁移来创建数据库。

打开 PMC:

工具 –> NuGet 包管理器 –> 包管理器控制台

运行Add-Migration InitialCreate 为迁移搭建基架,为您的模型创建初始表集。如果您收到一条错误消息,指出“add-migration”一词未被识别为 cmdlet 的名称,请关闭并重新打开 Visual Studio。

运行Update-Database 将新迁移应用到数据库。此命令在应用迁移之前创建数据库。

see it

【讨论】:

  • 所以你是说 ef core 不会像 ef 标准那样在没有迁移的情况下自动生成数据库?
  • 据我所知你也可以做到:使用 (var client = new AppDbContext()) { client.Database.EnsureCreated(); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 2013-02-16
  • 2013-10-07
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多