如何在 ASP.NET Core API 控制器中获取多个表的记录

Posted

技术标签:

【中文标题】如何在 ASP.NET Core API 控制器中获取多个表的记录【英文标题】:How to fetch record of more than one table in ASP.NET Core API Controller 【发布时间】:2020-06-29 01:17:57 【问题描述】:

我想从数据库中获取 3 个表,只是从 3 个表中获取所有值。

这个 api 在销售控制器中,我想在其中获取 3 个表 Customer、Product 和 Store,以便我可以在表单中使用它。

这里是数据库上下文

namespace CRUDReact.Model

public class DataBaseContext: DbContext

    public DataBaseContext(DbContextOptions<DataBaseContext> options) : base(options)  

    public DbSet<Customer> Customer  get; set; 
    public DbSet<Sales> Sales  get; set; 
    public DbSet<Product> Product  get; set; 
    public DbSet<Store> Store  get; set; 



这是我想用来获取 3 个表的 api。这个 api 在销售控制器中。

   // GET: api/AllSales
    [HttpGet]
    public async Task<ActionResult<IEnumerable<Object>>> GetAllSales()
    
        var salesdata = await _context.Sales
                 .Include(s => s.Customer)
                 .Include(s => s.Product)
                 .Include(s => s.Store)
                 .Select(s => new
                 
                     salesId = s.SalesId,
                     dateSold = s.DateSold,
                     customer = new
                     
                         customerId = s.CustomerRefId,
                         name = s.Customer.Name,
                         address = s.Customer.Address
                     ,
                     product = new
                     
                         productId = s.ProductRefId,
                         name = s.Product.Name,
                         price = s.Product.Price
                     ,
                     store = new
                     
                         storeId = s.StoreRefId,
                         name = s.Store.Name,
                         address = s.Store.Address
                     
                 )
                 .ToListAsync();
        return salesdata;
    

这是销售类

namespace CRUDReact.Models

public class Sales

    [Key]
    public int SalesId  get; set; 

    public int ProductRefId  get; set; 
    [ForeignKey("ProductRefId")]
    public Product Product  get; set; 

    public int CustomerRefId  get; set; 
    [ForeignKey("CustomerRefId")]
    public Customer Customer  get; set; 

    public int StoreRefId  get; set; 
    [ForeignKey("StoreRefId")]
    public Store Store  get; set; 

    [DataType(DataType.Date)]
    public string DateSold  get; set; 


【问题讨论】:

【参考方案1】:

使用 Include 获取销售额将导致从子表中获取数据。你为什么要投射它。

var salesdata = await _context.Sales
             .Include(s => s.Customer)
             .Include(s => s.Product)
             .Include(s => s.Store).ToListAsync();

通常 Sale 也会有 Store、Customer 和 List of Products,你确定你的模型是正确的吗?

【讨论】:

以上是关于如何在 ASP.NET Core API 控制器中获取多个表的记录的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core Web API 中使用 MassTransit 事件总线?

如何从 ASP.NET MVC 到 ASP.NET Core Web API 的 PUT?

如何在 ASP.NET Core Web API 中添加两个不同的令牌

如何更改 ASP.NET Core API 中的默认控制器和操作?

如何通过 ASP.NET Core 中的 api 控制器更新 IdentityUser 的自定义属性?

如何使 ASP.NET Core Web API 操作异步执行?