在 entity framework 核心的多对多关系中获取导航 属性 时出错
Error in getting navigation property in a many to many relationship in entity framework core
我有两个以多对多关系连接的实体,如下所示
public class Fee
{
public int Id { get; set; }
[Required]
public string Label { get; set; }
public string Description { get; set; }
----Ignored for brevity----
public virtual ICollection<ClassFee> ClassFees { get; set; }
}
public class StudentClass
{
public int Id { get; set; }
public string Label { get; set; }
---Ignored for brevity---
public virtual ICollection<ClassFee> ClassFees { get; set; }
}
public class ClassFee
{
public int Id { get; set; }
[Display(Name ="Fee")]
public int FeeId { get; set; }
[Display(Name ="Class")]
public int ClassId { get; set; }
---ignored for brevity---
[ForeignKey("FeeId")]
public Fee Fee { get; set; }
[ForeignKey("ClassId")]
public StudentClass Class { get; set; }
}
以下是我的 FeesController class,我打算在其中获取给定费用的详细信息以及费用适用于 classes 的列表
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var fee = await _context.Fees
.Include(cf => cf.ClassFees)
.FirstOrDefaultAsync(m => m.Id == id);
if (fee == null)
{
return NotFound();
}
return View(fee);
}
我原以为有了这个,我应该可以通过调用 classFeeEntityInstance.class.label
在视图中获得 class 的费用
获取 class 的标签,但 returns 为空。此外,当我在方法和 运行 代码上放置断点时,classfee.class 返回为 null
我还尝试执行以下操作,看看我是否可以在查询中急切地加载 class,但无法从 [=41] 中找到 class =]使用 ThenInclude 的费用如下
.Include(cf => cf.ClassFees).ThenInclude(f=>f.Class)
但是 f.Class 在那一点上不存在,因为 Visual Studio 中的智能不建议它并且它立即强调它我尝试添加它。
以下是我希望在class费用
下使用class的方式
@foreach (ClassFee classFee in Model.ClassFees)
{
@classFee.Class.Label
}
但是当代码为 运行
时 Class.Label 会抛出空引用异常
该应用程序正在 ASP.NET-Core 3.1 和 Entity Framework 3.1
上构建
我将不胜感激任何解决此问题的指南
谢谢
继续尝试使用 ThenInclude
构建它,它应该可以工作。有一个 known issue with Intellisense 和 ThenInclude
。
我有两个以多对多关系连接的实体,如下所示
public class Fee
{
public int Id { get; set; }
[Required]
public string Label { get; set; }
public string Description { get; set; }
----Ignored for brevity----
public virtual ICollection<ClassFee> ClassFees { get; set; }
}
public class StudentClass
{
public int Id { get; set; }
public string Label { get; set; }
---Ignored for brevity---
public virtual ICollection<ClassFee> ClassFees { get; set; }
}
public class ClassFee
{
public int Id { get; set; }
[Display(Name ="Fee")]
public int FeeId { get; set; }
[Display(Name ="Class")]
public int ClassId { get; set; }
---ignored for brevity---
[ForeignKey("FeeId")]
public Fee Fee { get; set; }
[ForeignKey("ClassId")]
public StudentClass Class { get; set; }
}
以下是我的 FeesController class,我打算在其中获取给定费用的详细信息以及费用适用于 classes 的列表
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var fee = await _context.Fees
.Include(cf => cf.ClassFees)
.FirstOrDefaultAsync(m => m.Id == id);
if (fee == null)
{
return NotFound();
}
return View(fee);
}
我原以为有了这个,我应该可以通过调用 classFeeEntityInstance.class.label
在视图中获得 class 的费用
获取 class 的标签,但 returns 为空。此外,当我在方法和 运行 代码上放置断点时,classfee.class 返回为 null
我还尝试执行以下操作,看看我是否可以在查询中急切地加载 class,但无法从 [=41] 中找到 class =]使用 ThenInclude 的费用如下
.Include(cf => cf.ClassFees).ThenInclude(f=>f.Class)
但是 f.Class 在那一点上不存在,因为 Visual Studio 中的智能不建议它并且它立即强调它我尝试添加它。
以下是我希望在class费用
下使用class的方式@foreach (ClassFee classFee in Model.ClassFees)
{
@classFee.Class.Label
}
但是当代码为 运行
时 Class.Label 会抛出空引用异常该应用程序正在 ASP.NET-Core 3.1 和 Entity Framework 3.1
上构建我将不胜感激任何解决此问题的指南 谢谢
继续尝试使用 ThenInclude
构建它,它应该可以工作。有一个 known issue with Intellisense 和 ThenInclude
。