簡體   English   中英

使用實體框架按 ID 獲取記錄

[英]Get record by ID using Entity Framework

如何更改以下操作以通過 ID 獲取單個結果? 我有以下代碼從數據庫中獲取所有記錄,我想修改它以便我可以獲得單個記錄。

namespace PDS.Core.App.Data.Action.Product
{
    public class GetProducts_Action : BaseEFAction<GetProducts_Action_Request, GetProducts_Action_Response>
    {
        private CRMSContext Context { get; }
        private IMapper Mapper { get; }

        public GetProducts_Action(ILogger<GetProducts_Action> logger, CRMSContext context, ITransactionManager scope, IMapper mapper) : base(logger, context, scope)
        {
            Context = context.ValidateAndConsumeNonNullableArgument(nameof(context));
            Mapper = mapper.ValidateAndConsumeNonNullableArgument(nameof(mapper));
        }

        protected override async Task<GetProducts_Action_Response> PerformActionAsync(GetProducts_Action_Request request)
        {
            var tb_Products = await Context.TB_Products
                .ToListAsync();

            var tb_ProductsDTOs = Mapper.Map<IList<TB_ProductDTO>>(tb_Products);
            return new GetProducts_Action_Response { TB_Products = tb_ProductsDTOs };
        }
    }

    public class GetProducts_Action_Request : BaseActionRequest
    {

    }

    public class GetProducts_Action_Response : BaseActionResponse
    {
        public IList<TB_ProductDTO> TB_Products { get; set; }
    }
}

如果您擴展代碼而不是修改它,則需要編寫一些代碼。

首先,您可以創建一個類似於GetProducts_Action_Request具有ProductId的新請求類,以便使用它來獲取單個產品項目。 例如,假設GetProduct_Action_Request

public class GetProduct_Action_Request : BaseActionRequest
{
    public int ProductId {get; set;}
}

和具有單個產品的響應對象:

public class GetProduct_Action_Response : BaseActionResponse
{
    public TB_ProductDTO TB_Product { get; set; }
}

然后,你需要創建新的動作GetProduct_Action類似GetProducts_Action 您可以使用SingleOrDefaultAsync返回唯一滿足Id條件的 Product 元素:

public class GetProduct_Action : BaseEFAction<GetProduct_Action_Request, GetProduct_Action_Response>
{
    private CRMSContext Context { get; }
    private IMapper Mapper { get; }

    public GetProduct_Action(ILogger<GetProduct_Action> logger, CRMSContext context, ITransactionManager scope, IMapper mapper) : base(logger, context, scope)
    {
        Context = context.ValidateAndConsumeNonNullableArgument(nameof(context));
        Mapper = mapper.ValidateAndConsumeNonNullableArgument(nameof(mapper));
    }

    protected override async Task<GetProduct_Action_Response> PerformActionAsync(GetProduct_Action_Request request)
    {
        var tb_Product = await Context.TB_Products.SingleOrDefaultAsync(i=> i.Id == request.ProductId);

        var tb_ProductDTO = Mapper.Map<IList<TB_ProductDTO>>(tb_Product);
        return new GetProduct_Action_Response { TB_Product = tb_ProductDTO };
    }
}

public class GetProduct_Action_Request : BaseActionRequest
{
    public int ProductId {get; set;}
}

public class GetProduct_Action_Response : BaseActionResponse
{
    public TB_ProductDTO TB_Product { get; set; }
}

因此,你有2個動作GetProduct_Action基於單一產品IdGetProducts_Action全部產品的清單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM