繁体   English   中英

如何在 EF ASP.NET MVC 中查询多个表?

[英]How to query multiple tables in EF ASP.NET MVC?

我想我有一个很大的初学者问题! 我尝试制作一个 ASP.NET MVC 5 Applikation,应用程序应该将供应商存储在数据库表中,在单独的表中它应该存储销售订单。 在视图中,当我单击供应商的详细信息时,应该加载所有详细信息,但也应该加载该供应商的所有销售订单。 我试过这种方式没有结果。

ModelBase 仅包含道具 ID。

课程

public class SalesOrder : ModelBase
{
    public string ordertitle { get; set; }
    public Supplier Supplier { get; set; }
}


public class Supplier : ModelBase
{
    public string CompanyName { get; set; }
    public string ContactPerson { get; set; }
    public string Phone { get; set; }
    public string Street { get; set; }
    public string Zip { get; set; }
    public string City { get; set; }
    public int Discount { get; set; }
}

视图模型

public class SalesOrderViewModel
{
    public Supplier Supplier { get; set; }
    public List<SalesOrder> SalesOrder { get; set; }
}

控制器

public ActionResult SupplierSalesOrders(int id)
{
    var supplier = _context.Suppliers.Single(s => s.Id == id);
    var salesorder = _context.SalesOrders.ToList().Where(s => s.Supplier == supplier);

    SalesOrderViewModel viewModel = new SalesOrderViewModel
    {
        Supplier = supplier,
        SalesOrder = salesorder.ToList()
    };

    return View(viewModel);
}

风景

@model NETwork.Models.SalesOrderViewModel


@foreach(var sales in Model)
{
    @Html.LabelFor(model => model.SalesOrder)
}

很抱歉提出这个问题。

我做错了什么?

此致

拉斯

您的第一个问题是您通常会按 Id 查询

.Where(s => s.Supplier == supplier);

以上不是id,是supplier的对象

一种解决方案是在Supplier包含SalesOrders的集合导航属性

public class Supplier : ModelBase
{
    public string CompanyName { get; set; }
    public string ContactPerson { get; set; }
    public string Phone { get; set; }
    public string Street { get; set; }
    public string Zip { get; set; }
    public string City { get; set; }
    public int Discount { get; set; }
    public ICollection<SalesOrder> SalesOrders { get; set; }
}

然后允许

 var supplier = _context.Suppliers
                        .Include(x => SalesOrders)
                        .Single(s => s.Id == id);


 SalesOrderViewModel viewModel = new SalesOrderViewModel
 {
      Supplier = supplier,
      SalesOrder = supplier.SalesOrder
 };

请注意,上面的viewModel可能并不理想。 这意味着, supplier自然会包含此化身中的所有salesorders ,而SalesOrder = supplier.SalesOrder salesorders将是多余的。

您可以向供应商的SalesOrder类添加外键。

public class SalesOrder : ModelBase
{
    public string ordertitle { get; set; }

    [ForeignKey(nameof(Supplier))]
    public int SupplierId { get; set; }

    public Supplier Supplier { get; set; }
}

您可以向供应商添加销售订单集合。

public class Supplier : ModelBase
{
    public string CompanyName { get; set; }
    public string ContactPerson { get; set; }
    public string Phone { get; set; }
    public string Street { get; set; }
    public string Zip { get; set; }
    public string City { get; set; }
    public int Discount { get; set; }
    public ICollection<SalesOrder> SalesOrders { get; set; }
}

然后,如果您想获得供应商的销售订单,您可以在查询供应商时使用 Include() 操作。

var supplier = _context.Suppliers.Include(s => s.SalesOrders).Single(s => s.Id == id);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM