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.