實體類型“Microsoft.AspNet.Mvc.Rendering.SelectListGroup”需要定義鍵

asp.net-core-mvc asp.net-mvc c# entity-framework entity-framework-core

不確定發生了什麼,但我在嘗試在我的網絡應用程序中提取任何視圖時收到以下錯誤。代碼由visual studio自動生成,我在構建之前沒有收到任何錯誤。使用ASP.Net MVC 6,EF7。

EntityFramework.Core.dll中出現“System.InvalidOperationException”類型的異常,但未在用戶代碼中處理

附加信息:實體類型“Microsoft.AspNet.Mvc.Rendering.SelectListGroup”需要定義密鑰。

這是代碼錯誤的行。

public IActionResult Index()
{
    var schoolContext = _context.Schools
                                .Include(s => s.District)
                                .Include(s => s.Location)
                                .Include(s => s.Tier);
    return View(schoolContext.ToList());
}

經過一番搜索,我無法確切地知道我需要修復什麼。這在某一點上有效。不確定是什麼改變了。

該視圖確實有一個捍衛

public IActionResult Index()
{
    var schoolContext = _context.Schools
                                .Include(s => s.District)
                                .Include(s => s.Location)
                                .Include(s => s.Tier);
    return View(schoolContext.ToList());
}

這裡要求的是學校模型

public IActionResult Index()
{
    var schoolContext = _context.Schools
                                .Include(s => s.District)
                                .Include(s => s.Location)
                                .Include(s => s.Tier);
    return View(schoolContext.ToList());
}

一般承認的答案

這些IEnumerable<SelectListItem> 應該是EF模型的一部分。記住單一責任原則 。使任何UI框架遠離DAL實現。使用代表School的視圖模型。

至於錯誤,從EF的角度來看, SchoolSelectListItem有1-n關聯,因此它試圖將其作為其映射模式的一部分。但是每個映射類型都需要一個主鍵,當然不會映射,而EF不能推斷出任何主鍵。

一個快速但又髒的修復方法是將屬性排除在[NotMapped]屬性的映射[NotMapped] ,但更好地隔離代碼是真正的補救措施。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因