You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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模式下,必须通过迁移管理数据库结构,步骤如下:

  1. 打开Visual Studio的包管理器控制台(路径:工具>NuGet包管理器>包管理器控制台)。
  2. 执行命令添加初始迁移:
Add-Migration InitialCreate
  1. 执行命令将迁移应用到数据库,自动创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:05:24