C# 如何在EF ASP.NET MVC中查询多个表?
我想我有一个很大的初学者问题!我尝试制作一个ASP.NETMVC5应用程序,该应用程序应该在数据库表中存储供应商,在单独的表中应该存储销售订单。在视图中,当我单击供应商的详细信息时,应加载所有详细信息,但也应加载该供应商的所有销售订单。我试过这种方法,但没有结果 ModelBase仅包含一个属性ID 班级C# 如何在EF ASP.NET MVC中查询多个表?,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我想我有一个很大的初学者问题!我尝试制作一个ASP.NETMVC5应用程序,该应用程序应该在数据库表中存储供应商,在单独的表中应该存储销售订单。在视图中,当我单击供应商的详细信息时,应加载所有详细信息,但也应加载该供应商的所有销售订单。我试过这种方法,但没有结果 ModelBase仅包含一个属性ID 班级 public class SalesOrder : ModelBase { public string ordertitle { get; set; } public Supp
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; }
}
景色
@model NETwork.Models.SalesOrderViewModel
@foreach(var sales in Model)
{
@Html.LabelFor(model => model.SalesOrder)
}
对不起,我的问题很长
我做错了什么
致意
Lars您的第一个问题是您通常会按Id进行查询
.Where(s => s.Supplier == supplier);
以上不是id,而是供应商的对象
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; }
}
一种解决方案是在Supplier
中包含salesforders
的集合导航属性
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; }
}
请注意,上面的viewModel可能并不理想。这意味着,
supplier
将自然包含此化身中的所有salesforder
,并且salesforder=supplier.salesforder
将是多余的。您可以为供应商的salesforder
类添加外键
公共类SalesOrder:ModelBase
{
公共字符串ordertitle{get;set;}
[外键(供应商名称))]
public int SupplierId{get;set;}
公共供应商{get;set;}
}
您可以向供应商添加销售订单集合
公共类供应商:模型库
{
公共字符串CompanyName{get;set;}
公共字符串ContactPerson{get;set;}
公用字符串电话{get;set;}
公共字符串Street{get;set;}
公共字符串Zip{get;set;}
公共字符串City{get;set;}
公共整数折扣{get;set;}
公共ICollection销售订单{get;set;}
}
然后,如果要获取供应商的销售订单,可以在查询供应商时使用Include()操作
var supplier=\u context.Suppliers.Include(s=>s.salesforders).Single(s=>s.Id==Id);
var supplier = _context.Suppliers
.Include(x => SalesOrders)
.Single(s => s.Id == id);
SalesOrderViewModel viewModel = new SalesOrderViewModel
{
Supplier = supplier,
SalesOrder = supplier.SalesOrder
};