엔터티 형식 '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());
}

어떤 검색을 한 후에 나는 정확히 내가 고쳐야 할 것을 알아낼 수 없다. 이것은 한 지점에서 일하고있었습니다. 무엇이 변경되었는지 확실하지 않습니다.

보기에는 defenition이 있습니다.

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] 속성 으로 매핑되는 속성을 제외하는 것이지만 코드를 더 잘 분리하는 것이 진정한 해결책입니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.