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

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

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

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

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