如何通过特定字段(不是主键)获取实体?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过特定字段(不是主键)获取实体?相关的知识,希望对你有一定的参考价值。

我已成功通过Id(主键)获取数据。但是,如果我通过另一个领域调用Get,为什么总是使用Id

这是我的代码:

Aitempatapasurvinsis

public interface ITempatAppService:IApplicationService
{
    GetTempatOutput GetTempatById(GetTempatInput input);

    GetTempatOutput GetTempatByIdKategori(GetTempatKategori input);
}

GetTempatInput.cs

public class GetTempatInput
{
    public int Id { get; set; }
}

GetTempatOutput.cs

public class GetTempatKategori
{
    public int IdKategori { get; set; }
}

TempatAppService.cs

public class TempatAppService:ApplicationService,ITempatAppService
{
    private readonly ITempatManager _tempatManager;
    public TempatAppService(ITempatManager tempatManager)
    {
        _tempatManager = tempatManager;
    }

    public GetTempatOutput GetTempatById(GetTempatInput input)
    {
        var getTempat = _tempatManager.GetTempatById(input.Id);
        GetTempatOutput output = Mapper.Map<MasterTempat, GetTempatOutput>(getTempat);
        return output;
    }

    public GetTempatOutput GetTempatByIdKategori(GetTempatKategori input)
    {
        var getTempat = _tempatManager.GetTempatByIdKategori(input.IdKategori);
        GetTempatOutput output = Mapper.Map<MasterTempat, GetTempatOutput>(getTempat);
        return output;
    }
}

这是我的TempatManager.cs:

public class TempatManager : DomainService, ITempatManager
{
    private readonly IRepository<MasterTempat> _repositoryTempat;
    public TempatManager(IRepository<MasterTempat> repositoryTempat)
    {
        _repositoryTempat = repositoryTempat;
    }

    public MasterTempat GetTempatById(int Id)
    {
        return _repositoryTempat.Get(Id);
    }

    public MasterTempat GetTempatByIdKategori(int IdKategori)
    {
        return _repositoryTempat.Get(IdKategori);
    }
}
答案

命名参数IdKategori不会使其按该列进行搜索。做这个:

public MasterTempat GetTempatByIdKategori(int IdKategori)
{
    return _repositoryTempat.GetAll().First(t => t.IdKategori == IdKategori);
}
另一答案

获取所选kategori的列表。

public List<MasterTempat> GetTempatByIdKategori(int IdKategori)
{
    return _repositoryTempat.GetAll().Where(t => t.IdKategori == IdKategori).ToList();
}

以上是关于如何通过特定字段(不是主键)获取实体?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UUID 字段而不是 JPA 的主键?

先获取代码中任意实体的主键值

如何在实体框架中为复合主键的特定列创建外键

如何在候选实体中检索 UDF 字段的特定值

没有主键和可为空字段的休眠实体

开发技巧-如何获取表记录的主键