如何在 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 中的默认控制器和操作?