EF ASP.Net Core MVC项目:自定义用户属性更新与LocalDB查看问题
我来帮你搞定这两个在ASP.NET Core Identity开发中常见的问题,都是踩过的坑,给你详细说下解决方案:
直接修改User对象后调用UpdateAsync完全可以更新数据库里的自定义属性,这是官方推荐的常规做法之一,和SetEmailAsync这类内置方法本质上逻辑一致——内置方法其实也是封装了“修改属性+保存更新”的流程,只是针对特定属性做了额外的验证或逻辑处理而已。
举个具体的代码示例,假设你的自定义用户类是这样的:
public class ApplicationUser : IdentityUser { public string TagLine { get; set; } }
要更新TagLine的话,代码可以这么写:
// 先获取要更新的用户实例 var user = await _userManager.FindByIdAsync(userId); if (user != null) { // 直接修改自定义属性 user.TagLine = "新的个性签名"; // 调用UpdateAsync保存到数据库 var result = await _userManager.UpdateAsync(user); // 可以根据result判断是否更新成功 if (result.Succeeded) { // 更新成功后的逻辑 } else { // 处理错误,比如遍历result.Errors } }
如果你的自定义属性需要额外的验证逻辑,也可以自己封装类似SetTagLineAsync的扩展方法,比如:
public static async Task<IdentityResult> SetTagLineAsync(this UserManager<ApplicationUser> userManager, ApplicationUser user, string tagLine) { user.TagLine = tagLine; return await userManager.UpdateAsync(user); }
这样用起来就和内置方法一样方便了。
LocalDB连接失败通常是因为服务器名不对或者实例没启动,按下面的步骤来排查和连接:
先找到你的连接字符串
打开项目里的appsettings.json,找到DefaultConnection,比如通常是这样的:"ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=WebApplication1-xxxxxx;Trusted_Connection=True;MultipleActiveResultSets=true" }记住里面的
Server值(一般是(localdb)\\mssqllocaldb)和Database名称(比如WebApplication1-xxxxxx)。确保LocalDB实例已启动
打开命令提示符(CMD)或者PowerShell,输入命令:sqllocaldb start mssqllocaldb如果实例没启动,这个命令会启动它;如果已经启动,会提示“已请求服务启动,但该服务已在运行”。
通过Visual Studio的Server Explorer连接
- 打开Server Explorer,右键点击
Data Connections,选择Add Connection - 在弹出的窗口里,选择
Microsoft SQL Server作为数据源,点击Continue - 在
Server name输入框里,粘贴刚才的服务器名:(localdb)\\mssqllocaldb - 选择
Select or enter a database name,然后在下拉列表里找到你连接字符串里的数据库名称(如果找不到,也可以手动输入) - 点击
Test Connection验证是否能连上,没问题的话点击OK就能看到数据库里的表和数据了。
- 打开Server Explorer,右键点击
备选方案:用SQL Server Management Studio(SSMS)连接
如果Server Explorer还是连不上,试试用SSMS:- 打开SSMS,在服务器名称里输入
(localdb)\\mssqllocaldb,身份验证选择Windows身份验证 - 连接成功后,在“数据库”节点下就能找到你的项目数据库,展开就能查看所有表(比如
AspNetUsers表就是存储用户数据的)。
- 打开SSMS,在服务器名称里输入
内容的提问来源于stack exchange,提问作者yellephen

