-1

我在课堂上有导航属性。它在数据库中有关联,但不返回来自员工信息导航属性类型的数据。

 public class Visa
    {
        public int VisaID { get; set; }
        public string VisaName { get; set; }
        public Info EmployeeInfo { get; set; }
        public List<Info> Employees { get; set; }
    }

Info 类与 Visa 类有一对多的关系,也在数据库中。

 public class Info
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string FatherName { get; set; }
    }

鉴于:

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.VisaName)

        </td>

            @foreach (var employee in item.Employees)
            {
               <td>@Html.DisplayFor(empItem => employee.Name) </td>
               <td>@Html.DisplayFor(empItem => employee.FatherName)</td>       
            }

        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.VisaID }) |
            @Html.ActionLink("Details", "Details", new { id=item.VisaID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.VisaID })
        </td>
    </tr>
}

item.Employees为空。为什么?甚至表格中都有数据。

更新:

此外,这是行不通的。因此,总体而言,无论出于何种原因,员工都被空置返回。

            InfoDBContext InfoContext = new InfoDBContext();

            object o = InfoContext.Visas.ToList().Where(visa => visa.VisaName == "Visa 1").FirstOrDefault().Employees;
            return View(o);

更新:

这也行不通。

  public ActionResult VEmployees() 
        {
            InfoDBContext InfoContext = new InfoDBContext();
            //int EmployeeID = InfoContext.Infoes.ToList().Where(emp => emp.ID == 1).FirstOrDefault().ID;
            object o = InfoContext.Visas.Include(e => e.Employees).Where(v => v.VisaName=="Hunain").FirstOrDefault().Employees;
            return View(o);
        }

两个实体都返回空

4

2 回答 2

1

这可能是因为Employees没有从数据库加载。

在将数据传递给视图之前,您可以尝试使用Eagerly Loading 。明确加载特定条目(Employees签证)。如果这不起作用,那么您的模型中的关系可能已经破裂。尝试在类OnModelCreating内的方法中重新配置模型InfoDBContext

检查这篇文章:https ://docs.microsoft.com/en-us/ef/ef6/querying/related-data

于 2019-01-10T08:37:12.353 回答
1

InfoVisa模型类中的导航属性配置不正确。你引用了单一的InfoList<Info>没有意义的。它应该是InfoList<Info>。但根据您的模型类结构,它似乎应该List<Info>如下:

public class Visa
{
    public int VisaID { get; set; }
    public string VisaName { get; set; }

    public List<Info> Employees { get; set; }
}

然后编写你的VEmployees方法如下:

public ActionResult VEmployees() 
{
        InfoDBContext infoContext = new InfoDBContext();

        List<Visa> vEmployees = infoContext.Visas.Include(e => e.Employees).Where(v => v.VisaName == "Hunain").ToList();
        return View(vEmployees);
 }

现在一切都应该正常了!

于 2019-01-10T12:23:01.637 回答