[英]How to make EF query who return aggregated values for many to many relation tables in MVC 5 ASP.NET
[英]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.