La navegación en el tipo de entidad no se ha agregado al modelo, ni se ha ignorado, o se ha ignorado entityType

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

Pregunta

Las 'Etiquetas' de navegación en el tipo de entidad 'Notepad.Models.Note' no se han agregado al modelo, ni se han ignorado, o se ha ignorado el tipo de entidad.

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

Sucede al agregar una migración:

las migraciones de dnx ef agregan DbData -c DataDbContext

¿Por qué crees que sucede?

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

Respuesta aceptada

Tienes una relación de muchos a muchos allí. Como dice la documentación: http://docs.efproject.net/en/latest/modeling/relationships.html#id21

Las relaciones de muchos a muchos sin una clase de entidad para representar la tabla de unión aún no son compatibles. Sin embargo, puede representar una relación de muchos a muchos incluyendo una clase de entidad para la tabla de unión y asignando dos relaciones separadas de uno a varios.

Así que debes crear una clase de "unión" adicional como esta:

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

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

entonces, reemplace

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

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

en tu clase de notas para

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

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

y también en la clase de etiqueta:

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

y luego anular el método OnModelCreating en DbContext:

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

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

Respuesta popular

Estoy usando EF 7, este problema tomó aproximadamente 2 horas de mi fin de semana. :) Entonces, aquí está la solución simple: estoy teniendo una clase de perfil como esta:

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

Estoy usando ProfileID como referencia de clave F en mi otra tabla llamada "StudentLivingWith". (ya, sé que el nombre es un poco extraño. :)) Como se puede ver en la siguiente clase, tanto las columnas "StudentProfileID" como "ParentProfileID" se refieren a la misma columna "profileID" de mi tabla de "Perfil".

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

Entonces, la conclusión es: solo necesita agregar la etiqueta [InverseProperty] en la referencia, y esta solución simple hizo el truco por mí.

Espero que esto sea de ayuda. Gracias.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué