Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从razor视图页引用外键?_C#_Asp.net Core_.net Core_Razor Pages - Fatal编程技术网

C# 如何从razor视图页引用外键?

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

这里是.NETCore的新手,我正在学习razor教程,并尝试向其中添加我自己的东西。我有两张桌子:订单和存货。我可以列出所有订单或所有库存,但当我想列出所有订单时,我想在查看页面(代码末尾附近)显示库存名称(而不是库存ID)。如何从查看页面引用外键“stockID”?这是我的密码:

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; }