使用单独的SQL过程填充类

时间:2017-10-04 17:05:17

标签: c# sql .net api stored-procedures

我试图让我的.NET API变得更聪明。当我从API获取数据时,我必须为每个结果进行API调用。目前,我有四个终点:

    [HttpGet("/api/GetCustomer/{customerNumber}")] 
    public async Task<IEnumerable<Customer>> GetCustomer(string customerNumber)
    {
        var custNum = new SqlParameter("@custNum", customerNumber);
        return await context.Customer.FromSql("EXEC sp_GetCustomer @custNum", custNum).ToArrayAsync();
    }

    [HttpGet("/api/GetCustomerTransactions/{customerNumber}/{startDate}/{endDate}")] 
    public async Task<IEnumerable<CustomerTransaction>> GetCustomerTransactions(string customerNumber, DateTime startDate, DateTime endDate)
    {
        var custNum = new SqlParameter("@custNum", customerNumber);
        var dateFrom = new SqlParameter("@dateFrom", startDate);
        var dateTo = new SqlParameter("@dateTo", endDate);
        return await context.CustomerTransactions.FromSql("EXEC sp_GetCustomerTransactions @custNum, @dateFrom, @dateTo", custNum, dateFrom, dateTo)
            .AsNoTracking()
            .ToArrayAsync();
    }

    [HttpGet("/api/GetCustomerTransactionDetails/{customerNumber}/{storeNumber}/{transactionNumber}")]
    public async Task<IEnumerable<CustomerTransactionDetail>> GetCustomerTransactionDetails(string customerNumber, string storeNumber, string transactionNumber)
    {
        var custNum = new SqlParameter("@custNum", customerNumber);
        var storeNum = new SqlParameter("@storeNum", storeNumber);
        var transNum = new SqlParameter("@transNum", transactionNumber);
        return await context.TransactionDetails.FromSql("EXEC sp_GetCustomerTransactionDetails @custNum, @storeNum, @transNum", custNum, storeNum, transNum)
            .AsNoTracking()
            .ToArrayAsync();
    }

    [HttpGet("/api/GetProduct/{productSku}/")]
    public async Task<IEnumerable<Product>> GetProduct(string productSku)
    {
        var sku = new SqlParameter("@sku", productSku);
        return await context.Product.FromSql("EXEC sp_GetProduct @sku", sku)
            .AsNoTracking()
            .ToArrayAsync();
    }

我有一对多的关系。 CustomerTransactions&gt; CustomerTransactionDetails&gt;产品。我认为解决方案是为每个类添加一个集合,但我不知道如何填充它,因为结果是在另一个SQL过程中。

public class CustomerTransaction
{
    [Key] public string KwiNumber { get; set; }
    public int StoreNumber { get; set; }
    public int TransactionNumber { get; set; }
    public DateTime TransactionDate { get; set; }
    public TimeSpan TransactionTime { get; set; }

    public ICollection<CustomerTransactionDetail> CustomerTransactionDetails { get; set; }

    public CustomerTransaction()
    {
        CustomerTransactionDetails = new Collection<CustomerTransactionDetail>();
    }
}

0 个答案:

没有答案