C# 如何从razor视图页引用外键?
这里是.NETCore的新手,我正在学习razor教程,并尝试向其中添加我自己的东西。我有两张桌子:订单和存货。我可以列出所有订单或所有库存,但当我想列出所有订单时,我想在查看页面(代码末尾附近)显示库存名称(而不是库存ID)。如何从查看页面引用外键“stockID”?这是我的密码:C# 如何从razor视图页引用外键?,c#,asp.net-core,.net-core,razor-pages,C#,Asp.net Core,.net Core,Razor Pages,这里是.NETCore的新手,我正在学习razor教程,并尝试向其中添加我自己的东西。我有两张桌子:订单和存货。我可以列出所有订单或所有库存,但当我想列出所有订单时,我想在查看页面(代码末尾附近)显示库存名称(而不是库存ID)。如何从查看页面引用外键“stockID”?这是我的密码: public class OrderModel { public int Id { get; set; } public string OrderName { get; set; } pub
public class OrderModel
{
public int Id { get; set; }
public string OrderName { get; set; }
public DateTime OrderDate { get; set; } = DateTime.UtcNow;
public int Quantity { get; set; }
public decimal StockUnitCost { get; set; }
public decimal StockTotalCost { get; set; }
public decimal WinLoseAmt { get; set; }
public int StockId { get; set; }
}
public class StockModel
{
public int Id { get; set; }
public string StockName { get; set; }
public string StockTicker { get; set; }
public string StockType { get; set; }
public string Sector { get; set; }
}
公共类OrderDisplayModel:PageModel
{
私有只读IOrderData\u orderData;
私有只读IStockData\u stockData;
公共订单模型订单{get;set;}
公共列表医嘱列表{get;set;}
public OrderDisplayModel(IOrderData orderData、IStockData stockData)
{
_orderData=orderData;
_stockData=stockData;
}
公共异步任务OnGet()
{
orderList=wait_orderData.GetOrder();
}
}
我的订单
订单名称
股票
量
成本基础
总成本
开放市场收益
订购日期
@foreach(Model.orderList中的变量顺序)
{
@order.OrderName
@购买的模型
@order.StockId
@订单,数量
@订货单价
@订单总成本
@order.WinLoseAmt
@order.OrderDate
}
谢谢 创建一个虚拟财产,并将其设置为ForeignKey(如果您希望从库存到订单拥有另一个虚拟集合财产,则设置为InverseProperty)。 像这样的
....
public int StockId { get; set; }
[ForeignKey(nameof(StockId))]
[InverseProperty("Orders")]
public virtual Stock Stock { get; set; }
然后,您可以在上下文调用中包含(s=>s.Stock)并像order.Stock.StockName一样访问它。或者设置延迟加载(在最近的.NET核心版本中,这需要更多的工作),您无需包含它就可以访问它。谢谢您的回答。您能否在上下文调用中对.Include(s=>s.Stock)进行详细说明。我需要在view.var orders=\u context.orders.Include(s=>s.Stocks.ToList())中访问每次订单传递的每个股票名称;然后,当您使用for each查看它们时,您将能够访问每个项目的Stock对象。我添加了虚拟财产并将其设置为foreignkey,但我在上下文调用中遇到了问题。在输入“var orders=\u context”之后,我得到一条红色的斜线,告诉我当前上下文中不存在名称\u context。我按ctrl键。和生成的字段OrderDisplayModel.\u context,它添加了“private object\u context;”。但在这样做之后,上下文并没有给我任何有用的选择。我没有看到订单或任何属性,也没有看到Include。仅供参考,我没有使用实体框架,我使用的是Dapper。我确实假设您实际使用的是EF。对不起,我没用过整洁的衣服。不知道它是如何管理关系的,如果有的话。很明显,您可以使用SQL进行连接,并用所需的属性填充模型,但不知道是否有更好的方法以Dapper方式完成。没问题。感谢您付出的时间和努力:)
<h1>My Orders</h1>
<table class="'table table-striped">
<thead class="thead-dark">
<tr>
<th>Order Name</th>
<th>Stock</th>
<th>Quantity</th>
<th>Cost Basis</th>
<th>Total Cost</th>
<th>Open Mkt Gain</th>
<th>Order Date</th>
</tr>
</thead>
<tbody>
@foreach (var order in Model.orderList)
{
<tr>
<td>@order.OrderName</td>
<td>@Model.StockPurchased</td>
<td>@order.StockId</td>
<td>@order.Quantity</td>
<td>@order.StockUnitCost</td>
<td>@order.StockTotalCost</td>
<td>@order.WinLoseAmt</td>
<td>@order.OrderDate</td>
</tr>
}
</tbody>
</table>
....
public int StockId { get; set; }
[ForeignKey(nameof(StockId))]
[InverseProperty("Orders")]
public virtual Stock Stock { get; set; }