通过.Net Core控制台应用程序从Entity Framework Core 1.x连接到localdb

5
我该如何在Visual Studio中的.NET Core 1.x控制台应用程序中使用Entity Framework Core 1.x?我尝试了来自ASP.NET MVC Core 1.x开发的工作流和命令,但是遇到了连接本地数据库的错误。
控制台应用程序中使用localdb与ASP.NET MVC Core 1.x应用程序有何不同?
背景: 我成功地多次使用ASP.NET MVC Core 1.x和Entity Framework Core 1.x,但现在需要创建一个简单的.NET Core控制台应用程序来完成一些任务(将XML加载到新数据库中,创建与XML结构大致匹配的表格)。
我使用NuGet安装了以下软件包: Microsoft.EntityFrameworkCore.Design(1.1.2) Microsoft.EntityFrameworkCore.SqlServer(1.1.2) Microsoft.EntityFrameworkCore.Tools(1.1.1)
我创建了一个带有DbSets的DbContext。我添加了一个OnConfiguring()方法,并像在网上找到的代码示例中那样硬编码了连接字符串。我的DbContext如下:
public class ApplicationDbContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"Server=(localdb)\\mssqllocaldb;Database=MyXmlExport;Trusted_Connection=True;MultipleActiveResultSets=true");
    }

    public DbSet<Author> Authors { get; set; }
    public DbSet<Thread> Threads { get; set; }
    public DbSet<Post> Posts { get; set; }
}

我从一个可用的ASP.NET MVC Core 1.x应用程序的appsettings.json中获取了连接字符串,将数据库名称更改为简单的内容(“MyXmlExport”)。
我能够创建一个初始迁移。
当我尝试使用我习惯的工作流程时,即调用:
update-database

我收到了以下错误信息:
“在建立与 SQL Server 的连接时发生了与网络或特定实例相关的错误。服务器未找到或无法访问。请验证实例名称是否正确,并确认 SQL Server 已配置为允许远程连接。(提供程序: SQL 网络接口,错误: 50 - 发生本地数据库运行时错误。指定的 LocalDB 实例名称无效。”
我可以通过 Sql Server 对象资源管理器连接到 localdb 实例。我尝试手动创建 MyXmlExport 数据库,希望至少能减少一个潜在问题。但似乎在控制台应用程序的上下文中使用 Visual Studio 的工具无法访问数据库。
完整的错误堆栈:

Full error stack


2
@ 表示你正在使用一个逐字字符串。你不应该在服务器和实例名称之间转义 \。但我并不确定这是否是你的错误。 - roryWoods
啊...我甚至没有想到那个。是的...我去掉了@符号,它可以工作了。(感觉很蠢)。谢谢。如果你把这个作为答案,我会标记它为答案。 - Bob Tabor
2个回答

8
< p > @ 表示您正在使用的是逐字字符串。在服务器和实例名称之间,不应转义\。< /p >

0

我不知道这是否对Bob有帮助,但我会考虑以下内容:

尝试停止LocalDb实例 - 使用以下命令列出实例:

SqlLocalDb i 

从命令行开始...

然后尝试

SqlLocalDb stop <INSTANCE NAME>

看看这是否有任何影响。

错误的味道表明是连接字符串的问题,因此值得检查每种访问方式的MDF文件路径是否正确。我过去曾遇到过处理LocalDb连接字符串方面的问题。

可能并不相关,但我还是会在这里提一下,如果您已经在SSMS中附加了LocalDb MDF,则在分离时SSMS将破坏MDF上的文件权限,这意味着您可能需要重置MDF和LDF文件的权限。就像我说的那样-听起来似乎不是这个问题,但可能会激发您的思维模式。


1
谢谢Richard!然而,@roryWoods看到了我错过的地方...我在optionsBuilder.UseSqlServer()中不需要@符号。 - Bob Tabor

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