Entity framework core 无法登录-用户登录失败';用户名';

Entity framework core 无法登录-用户登录失败';用户名';,entity-framework-core,asp.net-core-mvc,Entity Framework Core,Asp.net Core Mvc,我正在将我的ASP.NET Framework应用程序迁移到ASP.NET核心 我在连接生产数据库时遇到问题 我的本地SQLite数据库工作正常 当我尝试连接到远程SQLExpress数据库时,问题就出现了 错误消息是 用户“username”登录失败 第一件最明显的事情是,用户名或密码有错误,但我正在从web.config文件复制连接字符串,并将其粘贴到appsettings.json文件中 当我尝试使用.NET Framework版本连接到数据库时,它连接良好 如果我通过SSMS连接并使用S

我正在将我的ASP.NET Framework应用程序迁移到ASP.NET核心

我在连接生产数据库时遇到问题

我的本地SQLite数据库工作正常

当我尝试连接到远程SQLExpress数据库时,问题就出现了

错误消息是

用户“username”登录失败

第一件最明显的事情是,用户名或密码有错误,但我正在从web.config文件复制连接字符串,并将其粘贴到appsettings.json文件中

当我尝试使用.NET Framework版本连接到数据库时,它连接良好

如果我通过SSMS连接并使用SQL Server Auth,我可以使用相同的复制和粘贴凭据登录

我相信守则的有关部分是

public void Configure(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseLazyLoadingProxies();
    var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json", true, true).Build();
    var connectionString = configuration.GetConnectionString(GetConnectionString());

    if (IsTestDatabase())
    {                
        optionsBuilder.UseSqlite(connectionString);
    }
    else
    {  
        optionsBuilder.UseSqlServer(connectionString); //I ASSUME THIS WORKS WITH SQL EXPRESS
    }
}
我的appsettings.json文件的相关部分是

"ConnectionStrings": {
    "TestingDatabase": "Data Source=c:\\MyWebsite\\datastorage.db;",
    "LiveDatabase": "Data Source=111.111.111.111\\sqlexpress;initial catalog=DatabaseName;persist security info=True;user id=username;password=password;multipleactiveresultsets=True;"
},
我可以创建数据库上下文的实例,但不能查询任何数据

var dc = new DalCf.Entities();
var account = dc.Accounts.AsNoTracking().Single(); //this is the line that throws an exception

从我共享的内容来看,我好像做错了什么吗?

由于您可以在SSMS中成功连接,并且连接字符串有效,因此用于获取连接字符串的机制有问题:

configuration.GetConnectionString(GetConnectionString())

上行中使用的
GetConnectionString()
方法似乎没有返回正确的连接字符串


查看
GetConnectionString()
返回的内容(可能是某些字符的问题,例如密码使用非字母数字字符)

项目目录中是否缺少“迁移”文件夹?我被您的问题@vv4d弄糊涂了。我认为迁移文件夹是不相关的,因为它将取决于启动的项目-例如,如果我的测试项目中的一个测试需要连接到数据库,您是否建议也需要一个
迁移
文件夹?当您在SSMS中成功连接时,您是使用connectionstring中的IP还是服务器名称?与appsettings.json文件相同。我登录我的vps,打开ssms并输入ip地址\sqlexpress@MyDaftQuestions:您是否使用多个
appsettings.json
config文件?您使用的是.NET Core,而不是旧的ASP.NET和
web.config
,您可能需要在其中放置多个测试和生产连接字符串。使用.NET Core,您可以在相应的环境中声明多个
appsettings.json
配置文件,例如
appsettings.stagging.json
appsettings.test.json
appsettings.production.json
:。您不必以编程方式切换连接字符串。@MyDaftQuestions对此进行了另一次尝试。让我知道这是否有效。如果没有,让我们跳进来聊天,把这个弄明白!我想我可以分享这个-我的密码有一个符号。出于某种原因,虽然它在.NET Framework中运行良好,但.NET core不喜欢它。明天会给赏金,当它让我(不得不等21个小时)。非常感谢您通过检查
配置.GetConnectionString
的值,您是否发现缺少的字符导致密码不正确?如果您使用
£而不是实际字符本身。您需要在json中使用html实体名称。