La navigazione sul tipo di entità non è stata aggiunta al modello, o ignorata, o entityType ignorata

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

Domanda

La navigazione 'Tag' sul tipo di entità 'Notepad.Models.Note' non è stata aggiunta al modello, o ignorata, o entityType ignorata.

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; }
    }

Succede mentre aggiungi una migrazione:

Le migrazioni di dnx ef aggiungono DbData -c DataDbContext

Perché pensi che accada?

EDIT: 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; }
    }

Risposta accettata

Hai una relazione molti-a-molti lì. Come dice la documentazione: http://docs.efproject.net/en/latest/modeling/relationships.html#id21

Le relazioni many-to-many senza una classe entity per rappresentare la tabella join non sono ancora supportate. Tuttavia, è possibile rappresentare una relazione molti-a-molti includendo una classe di entità per la tabella di join e mappando due relazioni uno-a-molti separate.

Quindi devi creare una classe "join" aggiuntiva come questa:

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

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

quindi, sostituire

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

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

nella classe Note per

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

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

e anche in classe Tag:

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

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

a

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

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

e quindi eseguire l'override del metodo OnModelCreating in DbContext:

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

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

Risposta popolare

Sto usando EF 7, questo problema è durato circa 2 ore del mio week end. :) Quindi, ecco la soluzione semplice: sto avendo una classe profilo come questa -

[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; }
}

Sto usando il ProfileID come riferimento F-Key nella mia altra tabella chiamata "StudentLivingWith". (ya, so che il nome è un po 'strano :)) Come puoi vedere sotto la classe, entrambe le colonne "StudentProfileID" e "ParentProfileID" si riferiscono alla stessa colonna "profileID" della mia tabella "Profilo".

[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; }
}

Quindi la conclusione è - devi solo aggiungere il tag [InverseProperty] sul riferimento, e questa semplice soluzione ha fatto il trucco per me.

Spero che questo ti possa aiutare. Grazie.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché