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

ASP.NET Core MVC:求助实现一键批量为员工创建绩效评估

实现批量创建员工绩效评估的方案

1. 创建绩效评估实体模型

先定义关联用户的绩效评估实体,包含所需业务字段:

public class Appraisal
{
    public int Id { get; set; }
    public string UserId { get; set; } // 关联用户表的外键
    public DateTime HireDate { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Position { get; set; }
    public string Department { get; set; }
    public DateTime AppraisalCreatedDate { get; set; } = DateTime.Now;

    // 导航属性关联用户
    public virtual IdentityUser User { get; set; }
}

如果你的项目使用自定义用户模型(如AppUser),将IdentityUser替换为对应的自定义类即可。

2. 配置数据库上下文

在ApplicationDbContext中注册绩效评估实体,并配置关联关系:

public class ApplicationDbContext : IdentityDbContext<IdentityUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    public DbSet<Appraisal> Appraisals { get; set; }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        // 配置外键关联规则
        builder.Entity<Appraisal>()
            .HasOne(a => a.User)
            .WithMany()
            .HasForeignKey(a => a.UserId)
            .OnDelete(DeleteBehavior.Cascade);
    }
}

执行迁移命令更新数据库:

Add-Migration AddAppraisalsTable
Update-Database

3. 实现控制器批量创建逻辑

在AppraisalsController中注入用户管理服务和数据库上下文,编写批量创建的核心逻辑:

public class AppraisalsController : Controller
{
    private readonly UserManager<IdentityUser> _userManager;
    private readonly ApplicationDbContext _context;

    public AppraisalsController(UserManager<IdentityUser> userManager, ApplicationDbContext context)
    {
        _userManager = userManager;
        _context = context;
    }

    // 展示批量创建页面
    public IActionResult BulkCreate()
    {
        return View();
    }

    // 执行批量创建操作
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> CreateBulk()
    {
        // 获取所有员工用户(可根据需求过滤,比如排除管理员)
        var allEmployees = await _userManager.Users.ToListAsync();

        // 过滤已存在绩效评估的用户,避免重复创建
        var existingAppraisalUserIds = await _context.Appraisals.Select(a => a.UserId).ToListAsync();
        var targetEmployees = allEmployees.Where(u => !existingAppraisalUserIds.Contains(u.Id)).ToList();

        if (!targetEmployees.Any())
        {
            TempData["Tip"] = "所有员工已存在绩效评估,无需重复创建";
            return RedirectToAction(nameof(BulkCreate));
        }

        // 批量构建绩效评估实体
        var appraisals = targetEmployees.Select(u => new Appraisal
        {
            UserId = u.Id,
            HireDate = u.HireDate, // 确保用户模型包含该字段,无则需先扩展用户模型
            FirstName = u.FirstName,
            LastName = u.LastName,
            Position = u.Position,
            Department = u.Department
        }).ToList();

        // 批量写入数据库
        await _context.Appraisals.AddRangeAsync(appraisals);
        await _context.SaveChangesAsync();

        TempData["Tip"] = $"成功为{appraisals.Count}位员工创建绩效评估";
        return RedirectToAction(nameof(BulkCreate));
    }
}

如果你的用户模型缺少HireDate、Position等字段,需先扩展自定义用户模型:

public class AppUser : IdentityUser
{
    public DateTime HireDate { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Position { get; set; }
    public string Department { get; set; }
}

之后更新ApplicationDbContext继承IdentityDbContext<AppUser>,并重新执行数据库迁移。

4. 前端视图实现

创建BulkCreate.cshtml视图,添加触发批量创建的交互按钮:

@{
    ViewData["Title"] = "批量创建绩效评估";
}

<h1>批量创建绩效评估</h1>

@if (TempData["Tip"] != null)
{
    <div class="alert alert-info">@TempData["Tip"]</div>
}

<form asp-action="CreateBulk" method="post">
    @Html.AntiForgeryToken()
    <button type="submit" class="btn btn-primary">为所有员工创建绩效评估</button>
</form>

关键注意事项

  • 重复创建防护:通过查询已存在评估的用户ID过滤目标员工,也可根据评估周期(如年度评估)调整过滤规则。
  • 用户模型扩展:确保用户模型包含HireDate等业务字段,无则需先扩展并完成数据库迁移。
  • 性能优化:员工数量较多时,可采用分页查询或AsNoTracking()提升查询效率。
  • 权限控制:可添加[Authorize(Roles = "Admin")]特性,限制仅管理员能执行批量创建操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 06:42:42