2015-01-19 5 views
3

ASP.NET MVC5를 EF6과 함께 사용하고 있으며 코드 첫 번째 방법을 사용하고 있습니다.Entity Framework 6 - 속성을 외래 키가 아닌 것으로 표시하는 방법

나는 내가 EF6은 외래 키가 아닙니다 말할 필요가 모델의 속성이 있습니다

public class LogEntry 
{ 
    public int ID { get; set; } 
    public int LogDayID { get; set; } 
    public int LogEntryTypeID { get; set; } 
    public int DepartmentID { get; set; } 
    public DateTime Clock { get; set; } 
    public string Text { get; set; } 

    public virtual LogDay LogDay { get; set; } 
    public virtual LogEntryType LogEntryType { get; set; } 
    public virtual Department Department { get; set; } 
} 

[NotMapped] 
public class Department 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
} 

모델학과가 가지고있는 [NotMapped이 모델은 데이터베이스에 저장되지 않아야한다.

LogEntry의 DepartmentID가 외래 키가 아니어야한다는 것을 EF6에서 인식했다고 생각했습니다.하지만 'Department'가 매핑되지 않았다는 오류가 발생합니다.

EDIT : LogEntry에서 DepartmentID를 제거하더라도 여전히 위의 오류가 발생합니다.

여기에 전체 오류 메시지입니다 :.

"유형 'SupervisorLogWeb.Models.Department이'매핑되지 않은 유형이 명시 적으로이 방법 또는 NotMappedAttribute 데이터 주석을 무시 사용하여 제외되지 않았는지 확인합니다 확인합니다. 형식이 클래스로 정의 된, 기본 또는 일반 아니며 EntityObject에서 상속하지 않습니다. "

+0

Department는 DBContext의 일부입니까? 만약 그렇다면 - 괜찮은 것은 아닙니다. – TGlatzer

+0

T. 그 라저 - 그게 다야! 나는 DbContext에서 그것들을 제거하는 것을 완전히 잊었다. 감사. 어떻게 이것을 해결책으로 표시 할 수 있습니까? –

+0

나는 이것을 답으로 썼다. – TGlatzer

답변

0

ComplexType이 엔티티로 발견 된 것 같습니다. 이는 이전 엔티티를 ComplexType으로 리팩터링하기로 결정한 경우에 발생합니다.

ModelBuilder는 DbContext에서 형식이 엔터티인지 아닌지 (더 많거나 적음) 여부를 결정합니다.

그래서 클래스가 컨텍스트 내에서 여전히 DbSet으로 정의되어 있는지 확인하고 그에 따라 조정하십시오.

0

DeparmentID 속성에도 NotMapped 속성을 추가하십시오. 이 속성은 속성에도 적용 할 수 있습니다.

모든 매핑이 규칙에 기반을 두었을 때 EF (또는 모든 도구)는 의도적으로 협약을 위반했는지 또는 실수를했는지 여부를 실제로 알 수 없습니다. 경험적 방법을 적용 할 수는 있지만 원하지 않는 매핑을 구현하는 것보다 실패하고 프로그래머에게 물어 보는 것이 좋습니다.

+0

하지만 그렇게하면 DepartmentID를 데이터베이스에 저장하지 않게됩니다. 내 원래 게시물에서 내 편집을 참조하십시오. 부서 ID를 제거해도 문제가 다른 곳에있는 경우에도 오류가 발생합니다. –

+0

DTO에 여전히 'Department' 속성이 있습니다. 이전에는 알려지지 않았습니다. –

+0

가상 부서 개체를 의미하는 경우 가상 개체 개체가 있어야합니다. Department 개체의 기본 데이터는 SharePoint에서 가져오고 DepartmentID는 데이터베이스에 저장해야합니다. –

관련 문제