Dotnet EF更新未生成数据库。

6

我正在跟随一个制作dotnet 2 rest api的教程,并期望dotnet cli在dotnet ef update之后生成数据库。但是这并没有发生。

我有这个上下文类

 public class DutchContext : DbContext
 {
     public DutchContext(DbContextOptions<DutchContext> options): base(options)
     {
         public DbSet<Product> Products { get; set; }
         public DbSet<Order> Orders { get; set; }
    }
}

这是我在 StartUp.cs 中调用 con 字符串的方式。
public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<IMailService, NullMailService>();
    // support for real mail service
    services.AddMvc();
    services.AddDbContext<DutchContext>(cfg =>
    {
        cfg.UseSqlServer(_config.GetConnectionString("ConnectionString"));
    });
}

还有保存 con 字符串的 config.json 文件

{

  "ConnectionStrings": {
    "ConnectionString": "Server=(localdb)\\MSSQLLocalDB;Database=EstudoDotnetDB;Integrated Security=true;MultipleActiveResultSets=true"
  }
}

这是我的本地数据库名称 > (localdb)\MSSQLLocalDB

终端输出如下

$ dotnet ef database update
info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
      User profile is available. Using 'C:\Users\dbeze\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
      Entity Framework Core 2.0.1-rtm-125 initialized 'DutchContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (10ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT OBJECT_ID(N'__EFMigrationsHistory');
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT OBJECT_ID(N'__EFMigrationsHistory');
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT [MigrationId], [ProductVersion]
      FROM [__EFMigrationsHistory]
      ORDER BY [MigrationId];
info: Microsoft.EntityFrameworkCore.Migrations[20405]
      No migrations were applied. The database is already up to date.
No migrations were applied. The database is already up to date.
Done.

有什么想法吗?

如果这是一个愚蠢的问题,很抱歉,我对dotnet 2还不熟悉。


看起来数据库已经创建了,但是你的迁移可能有点问题。 - dev8989
1个回答

6
我会尝试删除迁移文件夹并重新开始。我之前遇到过这个问题,不得不删除ef迁移并重新开始。
1)手动删除您的数据库 - 无论它在哪里(假设您已经解决了连接),或者清空它,但更容易/更安全的方式是全部删除 - 因为有系统__MigrationHistory表 - 您需要将其删除。
2)删除所有迁移文件 - 这些文件位于迁移中,类似于数字等的命名方式-将它们全部删除,
3)重建包含迁移(和其他内容)的项目 - 并确保您的项目已设置(配置)自动构建(有时可能会导致问题-但对您来说不太可能),
4)再次运行Add-Migration Initial - 然后运行Update-Database 如何删除和重新开始EF迁移的文章

在SQL Server对象资源管理器中,我只能看到System databases文件夹中的数据库,它们的名称为“Master,Model,msdb和tempdb”。在教程中运行EF数据库更新后,它应该创建一个与我在连接字符串中编写的名称相同的数据库,但这对我来说似乎不是这种情况。我尝试手动创建一个数据库,然后添加迁移,但它没有将表添加到手动创建的数据库中,然后我从项目中删除了迁移,并尝试解决数据库问题。 - Daniel Bezerra De Menezes
没事了...哈哈,我连接错了,我需要添加SQL服务器并选择一个名为DESKTOP-vs600的。 - Daniel Bezerra De Menezes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接