检查是否使用Add-Migration创建了数据库

时间:2017-11-22 11:01:07

标签: c# asp.net entity-framework

VisualStudio 2017社区,ASP.NET Core 2。 我定义了一个dbContext:

namespace MyDb.Models
{


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

        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }
    }

    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }

        public List<Post> Posts { get; set; }
    }

    public class Post
    {
        public int PostId { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }

        public int BlogId { get; set; }
        public Blog Blog { get; set; }
    }
}

这是我的设置:

{
  "ConnectionStrings": {
    "MyDbContext": "Server=(localdb)\\mssqllocaldb;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true;"
  },

  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}

startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MyDbContext")));
    services.AddLocalization(options => options.ResourcesPath = "Resources");
    services.AddOptions();
    services.Configure<MyOptions>(Configuration);
    services.AddMvc()
        .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
        .AddDataAnnotationsLocalization();
}

我构建了解决方案,然后我添加了第一个迁移以创建数据库:

PM> Add-Migration Initial
Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
      User profile is available. Using 'C:\Users\Mark\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
Microsoft.EntityFrameworkCore.Infrastructure[10403]
      Entity Framework Core 2.0.1-rtm-125 initialized 'MyDbContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
To undo this action, use Remove-Migration.

但是现在当我尝试在Razor页面中访问它时,即:

namespace MyDb
{
    public class ViewTablesModel : PageModel
    {
        private readonly MyDbContext _context;

        public ViewTablesModel(MyDbContext context)
        {
            _context = context;
        }

        public IList<Blog> Blog { get;set; }

        public async Task OnGetAsync()
        {
            Blog = await _context.Blogs.ToListAsync();
        }
    }
}

它会触发SQL异常:

  

SqlException:无法打开登录请求的数据库“MyDb”。登录失败。

     

用户'MyComputer \ Mark'登录失败。

我不明白我的连接字符串是否错误(它应该依赖于Windows凭据,我还检查了项目属性中的“启用Windows身份验证”)或数据库不存在。

我在VS2017中检查了SQL Server对象资源管理器,并且我有(localdb)\ MSSQLLocalDB连接。我的“MyDb”应该出现在这里吗?它没有。

修改

第一个错误:数据库名称区分大小写。正确的名称是:MSSQLLocalDB。

事实上:

C:\Users\Mark>sqllocaldb i MSSQLLocalDB
Nome: "MSSQLLocalDB"
Versione: 13.1.4001.0
Nome condiviso:
Proprietario:              MyComputer\Mark
Creazione automatica:        Sì
Stato:              in esecuzione
Ultima ora di inizio: 22/11/2017 11:45:07
Nome pipe istanza: np:\\.\pipe\LOCALDB#1A9E83A0\tsql\query

现在错误略有不同:

  

Win32Exception:未知错误(0x89c50107)   未知位置

     

SqlException:建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:SQL网络接口,错误:50 - 发生本地数据库运行时错误.Istanza del database locale specificata inesistente。

我正在从VS2017启动调试模式的应用程序。它应该关注SQL Server,不应该吗? 无论如何,我看到正在执行“sqlservr.exe”进程。

但是尝试手动连接到该数据库(使用.udl文件)仍然失败。

1 个答案:

答案 0 :(得分:1)

数据库不是由Add-Migration创建的。相反,只创建具有CreateTable(...) etc语句的中间代码,必要时可以修改。

要应用迁移,请使用Update-Database命令。它还将为初始迁移创建数据库。