엔티티 유형에 대한 탐색이 모델에 추가되거나 무시되거나 엔티티 유형이 무시되었습니다.

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

문제

엔티티 유형 'Notepad.Models.Note'의 탐색 '태그'가 모델에 추가되지 않았거나 무시되었거나 entityType이 무시되었습니다.

public class Note
    {
        public Note()
        {
            CreationDate = DateTime.Now;
            Tags = new HashSet<Tag>();
            Parts = new HashSet<Part>();
        }

        public int ID { get; set; }
        public virtual ICollection<Tag> Tags { get; set; }
        public virtual ICollection<Part> Parts { get; set; }
        public DateTime? CreationDate { get; set; }
    }


public class Tag
    {
        public Tag()
        {
            Notes = new HashSet<Note>();
        }

        public int ID { get; set; }
        public string Name { get; set; }

        public virtual ICollection<Note> Notes { get; set; }
    }

마이그레이션을 추가하는 동안 발생합니다.

dnx ef 마이그레이션은 DbData -c DataDbContext를 추가합니다.

왜 그렇게 생각하니?

편집 : DataDbContext :

public class Note
    {
        public Note()
        {
            CreationDate = DateTime.Now;
            Tags = new HashSet<Tag>();
            Parts = new HashSet<Part>();
        }

        public int ID { get; set; }
        public virtual ICollection<Tag> Tags { get; set; }
        public virtual ICollection<Part> Parts { get; set; }
        public DateTime? CreationDate { get; set; }
    }


public class Tag
    {
        public Tag()
        {
            Notes = new HashSet<Note>();
        }

        public int ID { get; set; }
        public string Name { get; set; }

        public virtual ICollection<Note> Notes { get; set; }
    }

수락 된 답변

거기에 다 대다 관계가 있습니다. 설명서에 다음과 같이 나와 있습니다. http://docs.efproject.net/en/latest/modeling/relationships.html#id21

조인 테이블을 나타내는 엔티티 클래스가없는 다 대다 관계는 아직 지원되지 않습니다. 그러나 조인 테이블에 대한 엔티티 클래스를 포함하고 두 개의 별도 일대 다 관계를 매핑함으로써 다 대다 관계를 나타낼 수 있습니다.

따라서 다음과 같이 추가 "join"클래스를 만들어야합니다.

public class NoteTag
    {
        public int NoteId { get; set; }
        public Note Note { get; set; }

        public int TagId { get; set; }
        public Tag Tag { get; set; }
    }

그런 다음

public class NoteTag
    {
        public int NoteId { get; set; }
        public Note Note { get; set; }

        public int TagId { get; set; }
        public Tag Tag { get; set; }
    }

노트 클래스에서

public class NoteTag
    {
        public int NoteId { get; set; }
        public Note Note { get; set; }

        public int TagId { get; set; }
        public Tag Tag { get; set; }
    }

또한 Tag 클래스에서

public class NoteTag
    {
        public int NoteId { get; set; }
        public Note Note { get; set; }

        public int TagId { get; set; }
        public Tag Tag { get; set; }
    }

public class NoteTag
    {
        public int NoteId { get; set; }
        public Note Note { get; set; }

        public int TagId { get; set; }
        public Tag Tag { get; set; }
    }

DbContext에서 OnModelCreating 메서드를 재정의합니다.

public class NoteTag
    {
        public int NoteId { get; set; }
        public Note Note { get; set; }

        public int TagId { get; set; }
        public Tag Tag { get; set; }
    }

인기 답변

나는 EF 7을 사용하고 있는데,이 문제는 내 주말에 약 2 시간이 걸렸습니다. :) 그래서, 여기 간단한 해결책이 있습니다 - 저는이 프로파일 클래스를 가지고 있습니다 -

[Table("Profile")]
public class Profile
{
    public Profile()
    {

    }

    [Column(Order = 1)]
    [Key]        
    public Guid ProfileID { get; set; }
    [JsonIgnore]
    public virtual ICollection<StudentLivingWith> StudentProfileMap { get; set; }

    [JsonIgnore]
    public virtual ICollection<StudentLivingWith> ParentProfileMap { get; set; }
}

"StudentLivingWith"라는 다른 테이블에서 F 키 참조로 ProfileID를 사용하고 있습니다. (나중에 이름이 이상하다는 것을 압니다. :) 아래의 클래스에서 볼 수 있듯이 "StudentProfileID"및 "ParentProfileID"열은 "Profile"테이블의 "column"과 동일한 열을 참조합니다.

[Table("Profile")]
public class Profile
{
    public Profile()
    {

    }

    [Column(Order = 1)]
    [Key]        
    public Guid ProfileID { get; set; }
    [JsonIgnore]
    public virtual ICollection<StudentLivingWith> StudentProfileMap { get; set; }

    [JsonIgnore]
    public virtual ICollection<StudentLivingWith> ParentProfileMap { get; set; }
}

그래서 결론은 - 참조에 [InverseProperty] 태그를 추가하기 만하면됩니다.이 간단한 솔루션은 저를 위해 속임수였습니다.

이것이 도움이되기를 바랍니다. 감사.




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