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

使用Entity Framework开发.NET Core API时无ID值如何更新表数据

可行实现方案

方案1:新增对外非敏感唯一标识(最推荐)

在数据库实体中额外增加一个与主键一一对应的对外唯一字段,类型推荐使用Guid,插入数据时自动生成,仅对外暴露该字段,永远不返回数据库主键ID。

  • 实体定义示例:
public class Person
{
    // 数据库自增主键,全程不对外暴露
    public int Id { get; set; }
    // 对外唯一标识,和主键一一绑定
    public Guid PublicId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
  • 对外返回DTO定义:
public class PersonDto
{
    public Guid PublicId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

执行更新、删除操作时,前端传递PublicId,后端通过该字段查询到对应实体后执行操作即可,既避免了暴露数据库主键带来的遍历爬取风险,也能保证操作的精准性。

方案2:使用业务唯一组合键

如果你的业务场景中存在全局唯一的字段组合,例如FirstName+LastName不会出现重复,就可以直接用该组合作为查询条件查找实体,无需额外新增字段。

  • 更新操作示例代码:
public async Task UpdatePersonAsync(PersonUpdateDto updateDto, CancellationToken cancellationToken)
{
    var targetPerson = await _context.Persons
        .FirstOrDefaultAsync(p => 
            p.FirstName == updateDto.FirstName 
            && p.LastName == updateDto.LastName, 
            cancellationToken);
    if (targetPerson == null)
    {
        throw new KeyNotFoundException("未找到匹配的人员数据");
    }
    targetPerson.Age = updateDto.Age;
    await _context.SaveChangesAsync(cancellationToken);
}

注意:该方案仅适用于业务字段组合确实全局唯一的场景,若存在重复数据会导致误操作,不建议通用场景使用

方案3:加密主键后对外返回

如果不想改动数据库表结构,可以将数据库主键进行对称加密后放到DTO中返回,前端执行操作时传回加密字符串,后端解密得到真实主键后执行操作即可,加密密钥仅保存在后端配置中,不会泄露原始主键信息。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:57:01