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

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迁移生成:

  1. 打开Package Manager Console
  2. 执行Add-Migration InitialCreate生成迁移文件
  3. 执行Update-Database将迁移应用到数据库

内容的提问来源于stack exchange,提问作者Monalisa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:05:26