C# Razor MVC架构下如何连接本地Microsoft数据库存储密码请求?
实现密码修改请求数据存储到dbo.PasswordHint表的步骤
1. 完善PasswordModel模型
确保模型属性与dbo.PasswordHint表的字段一一对应,可通过数据注解指定主键、必填规则等:
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; public class PasswordModel { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } [Required] public string UserName { get; set; } [Required] [EmailAddress] public string Email { get; set; } [Required] public string HintQuestion { get; set; } [Required] public string HintAnswer { get; set; } }
如果模型属性名和数据库列名不一致,可通过[Column("ColumnName")]注解做映射。
2. 创建DbContext类
DbContext是EF Core连接数据库与模型的核心,定义如下:
using Microsoft.EntityFrameworkCore; public class AppDbContext : DbContext { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } // 对应dbo.PasswordHint表 public DbSet<PasswordModel> PasswordHint { get; set; } // 若模型名与表名不符,可通过Fluent API配置映射 protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<PasswordModel>().ToTable("PasswordHint"); } }
3. 补充连接字符串配置示例
在appsettings.json中配置本地SQL Server连接字符串:
{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=YourDbName;Trusted_Connection=True;MultipleActiveResultSets=true" } }
替换YourDbName为你的实际数据库名称。
4. 注册DbContext到依赖注入
在Program.cs中添加DbContext服务:
var builder = WebApplication.CreateBuilder(args); // 注册AppDbContext,使用SQL Server builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); builder.Services.AddControllersWithViews(); var app = builder.Build(); // 中间件配置(如静态文件、路由等)... app.Run();
5. 在PasswordController中保存数据
通过构造函数注入AppDbContext,在POST Action中处理用户提交的数据:
using Microsoft.AspNetCore.Mvc; public class PasswordController : Controller { private readonly AppDbContext _dbContext; public PasswordController(AppDbContext dbContext) { _dbContext = dbContext; } [HttpGet] public IActionResult RequestReset() { return View(); } [HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> RequestReset(PasswordModel model) { if (ModelState.IsValid) { _dbContext.PasswordHint.Add(model); await _dbContext.SaveChangesAsync(); return RedirectToAction(nameof(ResetSuccess)); } return View(model); } public IActionResult ResetSuccess() { return View(); } }
6. 生成数据库表(可选,Code First模式)
如果数据库中还没有dbo.PasswordHint表,可通过EF Core迁移生成:
- 打开Package Manager Console
- 执行
Add-Migration InitialCreate生成迁移文件 - 执行
Update-Database将迁移应用到数据库
内容的提问来源于stack exchange,提问作者Monalisa
相关产品推荐
相关产品推荐

