.NET 6 WPF使用Code First连接本地MS SQL Server失败求助
解决.NET 6 WPF EF Core Code First连接SQL Server的登录与数据库创建问题
核心问题分析
你的错误主要来自两个关键点:
- 连接字符串身份验证参数冲突:
Integrated Security=False和Trusted_Connection=Yes互斥,后者等价于Integrated Security=True,SQL Server无法识别正确的身份验证方式,最终触发登录失败。 - Code First模式未正确初始化数据库:EF Core默认不会自动创建数据库(除非显式配置),且当前用户可能缺少创建数据库的权限。
步骤1:修复连接字符串
根据你使用的身份验证方式二选一:
方式一:Windows身份验证(本地开发推荐)
删除冲突的Integrated Security=False参数,保留Trusted_Connection=Yes,确保当前Windows用户拥有SQL Server登录权限:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( "data source=localhost; initial catalog=CapsizeRUs-Dev; persist security info=True; Trusted_Connection=Yes; MultipleActiveResultSets=True;" ); base.OnConfiguring(optionsBuilder); }
方式二:SQL Server身份验证
如果使用SQL账号登录,需明确指定User ID和Password,并设置Trusted_Connection=No(或Integrated Security=False):
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( "data source=localhost; initial catalog=CapsizeRUs-Dev; persist security info=True; User ID=你的SQL账号; Password=你的SQL密码; Trusted_Connection=No; MultipleActiveResultSets=True;" ); base.OnConfiguring(optionsBuilder); }
步骤2:确保用户拥有数据库创建权限
- Windows身份验证:打开SSMS登录本地SQL Server,在安全性>登录名中找到你的Windows用户(格式
DESKTOP-xxxx\xxxx),右键进入属性,在服务器角色中勾选dbcreator(允许创建数据库);若数据库已存在,可在用户映射中为该数据库分配读写权限。 - SQL Server身份验证:确保该SQL账号拥有
dbcreator服务器角色,或对目标数据库具备创建权限。
步骤3:启用EF Core迁移并初始化数据库
Code First模式下,必须通过迁移管理数据库结构,步骤如下:
- 打开Visual Studio的包管理器控制台(路径:工具>NuGet包管理器>包管理器控制台)。
- 执行命令添加初始迁移:
Add-Migration InitialCreate
- 执行命令将迁移应用到数据库,自动创建
CapsizeRUs-Dev数据库和Users表:
Update-Database
步骤4:修正数据添加代码
你的User实体中Id是主键,EF Core会自动将int类型主键识别为自增列,无需手动设置Id=0;同时Password标记了null!,必须赋值避免空值异常:
using (var ctx = new EntityContext()) { var user = new User() { Password = "test123", IsAdmin = false }; ctx.Users.Add(user); ctx.SaveChanges(); }
额外说明
EF Core在调用SaveChanges前确实会尝试连接数据库,但如果数据库不存在且用户有创建权限,结合迁移配置会自动创建。不过直接依赖SaveChanges自动建库不是规范做法,使用迁移能更好地管理数据库版本和结构变更。
内容的提问来源于stack exchange,提问作者Mark Foyster
相关产品推荐
相关产品推荐

