C# 在控制器中包含/访问一个或多个表

C# 在控制器中包含/访问一个或多个表,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我的数据库中有产品、库存和存储的表 Stock表包含产品(ProductId)和存储(StorageID)的外键。 现在,我正在尝试以模式显示产品详细信息。 我现在可以在modal中显示的信息是ProductName、Price和StorageId。我不想显示StorageId,但我想显示产品的可用位置(StorageName)。所以我需要将存储表包含到我的视图中 问题是我不能在控制器中包含存储表,只能包含库存表。这有什么解决办法吗? 这是我的控制器 public async Task<I

我的数据库中有产品、库存和存储的表 Stock表包含产品(ProductId)和存储(StorageID)的外键。 现在,我正在尝试以模式显示产品详细信息。 我现在可以在modal中显示的信息是ProductName、Price和StorageId。我不想显示StorageId,但我想显示产品的可用位置(StorageName)。所以我需要将存储表包含到我的视图中

问题是我不能在控制器中包含存储表,只能包含库存表。这有什么解决办法吗? 这是我的控制器

public async Task<IActionResult> Details(long? id)
    {

        var products = await _context.Products.Include(s => s.Stock)
            .FirstOrDefaultAsync(s => s.ProductId == id);

        return View(products);
    }

您可以像这样使用EF Core的
thenclude()
扩展方法:

public async Task<IActionResult> Details(long? id)
{

    var products = await _context.Products
              .Include(p => p.Stock)
                  .ThenInclude(s => s.Storage)
              .FirstOrDefaultAsync(p => p.ProductId == id);

    return View(products);
}
公共异步任务详细信息(长?id)
{
var products=等待_context.products
.包括(p=>p.Stock)
.然后包括(s=>s.存储)
.FirstOrDefaultAsync(p=>p.ProductId==id);
返回视图(产品);
}

好的,让我们先看看我是否理解你的意思。您想从库存obj访问存储obj吗?通过查看代码,您是否尝试过这样的操作:
s.Stock.Storage.StorageName
public partial class Stock
  {
    public long StockId { get; set; }
    public long Quantity { get; set; }
    public long? ProductId { get; set; }
    public int? StorageId { get; set; }

    public Products Product { get; set; }
    public Storage Storage { get; set; }
}
}
public async Task<IActionResult> Details(long? id)
{

    var products = await _context.Products
              .Include(p => p.Stock)
                  .ThenInclude(s => s.Storage)
              .FirstOrDefaultAsync(p => p.ProductId == id);

    return View(products);
}