使用Entity Framework Core通过Windows身份验证连接数据库失败求助
错误信息
Microsoft.Data.SqlClient.SqlException: 'Cannot open database "EfCoreBasicDb" requested by the login. The login failed.
Login failed for user 'LIZARD\BLAKD'.'
代码实现
public class Program { public static void Main(string[] args) { using var dbContext = new ApplicationDbContext(); dbContext.Database.ExecuteSqlRaw("SELECT 1"); Console.WriteLine(); Console.WriteLine($"Name Provider: {dbContext.Database.ProviderName}."); Console.WriteLine(); } } public class ApplicationDbContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .UseSqlServer( @"Server=(localdb)\mssqllocaldb;Database=EfCoreBasicDb;Trusted_Connection=True; TrustServerCertificate=True; Integrated Security=True") .EnableDetailedErrors() .EnableSensitiveDataLogging() .LogTo( Console.WriteLine, new[] { DbLoggerCategory.Database.Command.Name }, LogLevel.Information); } }
当前状态
- 在Microsoft SQL Server Management Studio(SSMS)中使用Windows身份验证登录正常
- 用户映射配置显示:Windows用户
LIZARD\BLAKD已成功映射到EfCoreBasicDb数据库,且配置了对应数据库权限 - 登录状态显示:该账户状态正常,未被禁用
- 用户映射配置显示:Windows用户
已尝试的连接字符串选项
以下配置均已测试,但问题未解决:
Trusted_Connection=True; TrustServerCertificate=TrueIntegrated Security=SSPI; TrustServerCertificate=TrueIntegrated Security=true; TrustServerCertificate=True
排查建议
验证LocalDB实例状态
打开命令提示符,执行sqllocaldb info确认mssqllocaldb实例是否运行;若未运行,执行sqllocaldb start mssqllocaldb启动实例。检查数据库权限细节
在SSMS中右键EfCoreBasicDb数据库 → 【属性】→ 【权限】,确认LIZARD\BLAKD用户拥有CONNECT权限,以及执行SELECT语句的必要权限(如db_datareader角色)。简化连接字符串
Trusted_Connection=True与Integrated Security=True等效,同时配置可能引发冲突,改用最简有效配置:Server=(localdb)\mssqllocaldb;Database=EfCoreBasicDb;Trusted_Connection=True;TrustServerCertificate=True确认程序运行身份
若在IDE中运行,检查Visual Studio的运行身份是否为当前Windows用户LIZARD\BLAKD;若为发布后的程序,右键程序 → 【属性】→ 【兼容性】,确认未设置以其他用户身份运行。检查LocalDB数据库文件权限
LocalDB数据库文件默认存于用户目录(C:\Users\[用户名]\),确认EfCoreBasicDb的mdf/ldf文件归属于LIZARD\BLAKD用户,且拥有读写权限。
内容的提问来源于stack exchange,提问作者purple_stone

