SQL Server 如何在ASP.NET核心Web API中实现按id获取?

zzwlnbp8  于 2023-01-12  发布在  .NET
关注(0)|答案(3)|浏览(158)

当我试图实现get by id API服务时,我得到了所有的记录,而不是ASP.NET Core Web API中的某个特定记录。

[HttpGet("EmployeeId")]
public ActionResult<Employeedatum> Getbyid(int EmployeeId)
{
    if (EmployeeId <= 0)
    {
        return NotFound("not found");
    }

    Employeedatum employeedata = DbContext.Employeedatum.FirstOrDefault(s => s.empid == EmployeeId);

    if (employeedata == null)
    {
        return NotFound("notfound");
    }

    return Ok(employeedata);
}

This is my code.

uubf1zoe

uubf1zoe1#

当我试图实现get by id API服务时,我得到了所有的记录,而不是ASP.NET Core Web API中的某个特定记录。
好吧,首先你的问题,你分享的代码片段和你所附的截图是不同的。我正在考虑你的实际代码片段,而不是截图。
根据您的代码片段,我已在DbContext class中替换了您的代码,并尝试模拟您的问题。我正在按预期获得数据。请确保您已相应地遵循以下步骤:
型号:

public class Employeedatum
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
    • 注:**这里[Key]在数据过滤中起着重要的作用,请确保您的Employeedatum类需要[Key],因此在数据库中也需要[Key],您可以检查如下:

数据库上下文:

public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
        {
        }
       
        public DbSet<Employeedatum> Employeedata { get; set; }
     

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Employeedatum>().ToTable("Employees");
        }
    }
    • 注意:**我已经尝试快速重现您的问题,因此我使用DbFirst方法。但您也可以使用FluentAPI或或任何其他模式。

控制器:

[Route("api/[controller]")]
    [ApiController]
    public class EmployeeController : ControllerBase
    {
        private readonly ApplicationDbContext _appDbContext;

        public EmployeeController(ApplicationDbContext appDbContext)
        {
            _appDbContext = appDbContext;
        }

        [HttpGet("Getbyid")]
        public ActionResult<Employeedatum> Getbyid(int EmployeeId)
        {
            if (EmployeeId <= 0)
            {
                return NotFound("not found");
            }

            Employeedatum employeedata = _appDbContext.Employeedata.FirstOrDefault(s => s.Id == EmployeeId);

            if (employeedata == null)
            {
                return NotFound("notfound");
            }

            return Ok(employeedata);
        }
       

    }

替代方式:
您甚至可以使用Find来过滤或搜索您的实体。

Employeedatum employeedata = _appDbContext.Employeedata.Find(EmployeeId);
    • Postman 产出:**

如果您还需要更多的信息,您可以在这里查看我们的官方文件。

gopyfrb3

gopyfrb32#

您的代码应该可以工作。但是需要检查Employeedatum和DB初始化来发现我们的多个数据返回问题。
反正你可以像下面这样开发它

[HttpGet("EmployeeId")]
    public  ActionResult Getbyid(int EmployeeId)
    {
        if (EmployeeId <= 0)
            return NotFound("not found");

        var employeedata =  DbContext.Employeedatum..GetById(EmployeeId);

        return employeedata ?? NotFound("notfound");
    }
bzzcjhmw

bzzcjhmw3#

尝试将此作为Lync查询

Employeedatum employeedata = DbContext.Employeedatum.where(s => s.empid == EmployeeId).FirstOrDefault();

相关问题