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

propiedad tag c#



La navegaciĆ³n en el tipo de entidad no se ha agregado al modelo, ni se ha ignorado, ni se ha ignorado entityType (2)

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

Aún no se admiten las relaciones de muchos a muchos sin una clase de entidad para representar la tabla de unión. Sin embargo, puede representar una relación de muchos a muchos al incluir una clase de entidad para la tabla de unión y mapear dos relaciones separadas de uno a muchos.

Entonces debes crear una clase adicional "join" 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

ICollection<Tag> Tags {set;get}

en su clase Nota a

ICollection<NoteTag> NoteTags {set;get}

y también en la clase Tag:

ICollection<Note> Notes {set;get;}

a

ICollection<NoteTags> NoteTags {set;get}

y luego anula el método OnModelCreating en DbContext:

protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<NoteTag>() .HasKey(t => new { t.NoteId, t.TagId }); modelBuilder.Entity<NoteTag>() .HasOne(pt => pt.Note) .WithMany(p => p.NoteTags) .HasForeignKey(pt => pt.NoteId); modelBuilder.Entity<NoteTag>() .HasOne(pt => pt.Tag) .WithMany(t => t.NoteTags) .HasForeignKey(pt => pt.TagId); }

La navegación ''Tags'' en el tipo de entidad ''Notepad.Models.Note'' no se ha agregado al modelo, ni se ha ignorado, ni se ha ignorado 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; } }

Sucede al agregar una migración:

Las migraciones dnx ef agregan DbData -c DataDbContext

¿Por qué crees que sucede?

EDITAR: DataDbContext:

public class DataDbContext : DbContext { public DbSet<Note> Notes { get; set; } public DbSet<Tag> Tags { get; set; } public DbSet<Part> Parts { get; set; } }


Estoy usando EF 7, este problema tomó alrededor de 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 el ProfileID como una referencia F-Key en mi otra tabla llamada "StudentLivingWith". (ya, sé que el nombre es un poco extraño. :)) Como se puede ver en la clase inferior, tanto las columnas "StudentProfileID" y "ParentProfileID" se refieren a la misma columna "profileID" de mi tabla de "Perfil".

[Table("StudentLivingWith")] public class StudentLivingWith { public StudentLivingWith() { } [Column(Order = 1)] [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int StudentLivingWithID { get; set; } [Column(Order = 2)] [ForeignKey("StudentProfileID")] public Guid StudentProfileID { get; set; } [Column(Order = 3)] [ForeignKey("ParentProfileID")] public Guid ParentProfileID { get; set; } [JsonIgnore] [InverseProperty("StudentProfileMap")] public virtual ICollection<Profile> StudentProfile { get; set; } [JsonIgnore] [InverseProperty("ParentProfileMap")] public virtual ICollection<Profile> ParentProfile { get; set; } }

Así que la conclusión es que solo necesitas agregar la etiqueta [InverseProperty] en la referencia, y esta solución simple me solucionó el problema.

Espero que esto sea de ayuda. Gracias.