实体类型 'Microsoft.AspNet.Mvc.Rendering.SelectListGroup' 需要定义键
The entity type 'Microsoft.AspNet.Mvc.Rendering.SelectListGroup' requires a key to be defined
不确定发生了什么,但我在尝试在我的网络应用程序中拉出任何视图时遇到以下错误。该代码由 visual studio 自动生成,在构建之前我没有收到任何错误。使用 ASP.Net MVC 6、EF7。
An exception of type 'System.InvalidOperationException' occurred in EntityFramework.Core.dll but was not handled in user code
Additional information: The entity type 'Microsoft.AspNet.Mvc.Rendering.SelectListGroup' requires a key to be defined.
这是代码出错的行。
public IActionResult Index()
{
var schoolContext = _context.Schools
.Include(s => s.District)
.Include(s => s.Location)
.Include(s => s.Tier);
return View(schoolContext.ToList());
}
经过一番搜索后,我无法确定我需要修复的确切内容。这曾一度奏效。不确定发生了什么变化。
视图确实有定义
@model IEnumerable<School>
这里要求的是学校模型
public class School
{
//Original Fields
public int SchoolId { get; set; }
[Display(Name = "Name")]
public string SchoolName { get; set; }
[Display(Name = "Date Added")]
public DateTime SchoolDateAdded { get; set; }
[Display(Name = "Last Update")]
public DateTime SchoolLastUpdate { get; set; }
[Display(Name="Updated By")]
public string SchoolUpdatedBy { get; set; }
//Referance Fields
public int DistrictId { get; set; }
public IEnumerable<SelectListItem> DistrictList { get; set; }
public int LocationId { get; set; }
public IEnumerable<SelectListItem> LocationList { get; set; }
public int TierId { get; set; }
public IEnumerable<SelectListItem> TierList { get; set; }
//Navigation Property
public District District { get; set; }
public Location Location { get; set; }
public Tier Tier { get; set; }
}
这些 IEnumerable<SelectListItem>
应该 而不是 是您的 EF 模型的一部分。记住单一责任原则。让任何 UI 框架远离您的 DAL 实现。使用表示 School
.
的视图模型
至于错误,从 EF 的角度来看,School
与 SelectListItem
具有 1-n 关联,因此它试图使其成为其映射模式的一部分。但是每个映射类型都需要一个主键,当然没有映射,EF 无法推断任何。
一个快速但肮脏的修复方法是将属性从 [NotMapped]
attribute 映射中排除,但更好的代码隔离才是真正的补救措施。
不确定发生了什么,但我在尝试在我的网络应用程序中拉出任何视图时遇到以下错误。该代码由 visual studio 自动生成,在构建之前我没有收到任何错误。使用 ASP.Net MVC 6、EF7。
An exception of type 'System.InvalidOperationException' occurred in EntityFramework.Core.dll but was not handled in user code
Additional information: The entity type 'Microsoft.AspNet.Mvc.Rendering.SelectListGroup' requires a key to be defined.
这是代码出错的行。
public IActionResult Index()
{
var schoolContext = _context.Schools
.Include(s => s.District)
.Include(s => s.Location)
.Include(s => s.Tier);
return View(schoolContext.ToList());
}
经过一番搜索后,我无法确定我需要修复的确切内容。这曾一度奏效。不确定发生了什么变化。
视图确实有定义
@model IEnumerable<School>
这里要求的是学校模型
public class School
{
//Original Fields
public int SchoolId { get; set; }
[Display(Name = "Name")]
public string SchoolName { get; set; }
[Display(Name = "Date Added")]
public DateTime SchoolDateAdded { get; set; }
[Display(Name = "Last Update")]
public DateTime SchoolLastUpdate { get; set; }
[Display(Name="Updated By")]
public string SchoolUpdatedBy { get; set; }
//Referance Fields
public int DistrictId { get; set; }
public IEnumerable<SelectListItem> DistrictList { get; set; }
public int LocationId { get; set; }
public IEnumerable<SelectListItem> LocationList { get; set; }
public int TierId { get; set; }
public IEnumerable<SelectListItem> TierList { get; set; }
//Navigation Property
public District District { get; set; }
public Location Location { get; set; }
public Tier Tier { get; set; }
}
这些 IEnumerable<SelectListItem>
应该 而不是 是您的 EF 模型的一部分。记住单一责任原则。让任何 UI 框架远离您的 DAL 实现。使用表示 School
.
至于错误,从 EF 的角度来看,School
与 SelectListItem
具有 1-n 关联,因此它试图使其成为其映射模式的一部分。但是每个映射类型都需要一个主键,当然没有映射,EF 无法推断任何。
一个快速但肮脏的修复方法是将属性从 [NotMapped]
attribute 映射中排除,但更好的代码隔离才是真正的补救措施。