guardando una relación de muchos a muchos en EF 4.3

Tengo un problema con guardar una relación de muchos a muchos. Cuando ejecuto el código, mi tabla de mapeo "dbo.UserTown" no tiene ningún dato guardado en esto, ¿alguna idea de por qué?

Escribí mi función para guardar a los usuarios con listas de ciudades.

  public void Save(User user)
    {
        context.User.Add(user);
        context.SaveChanges();
    }

Mis clases son así:

public class User
{
    public long UserId { get; set; }
    public String Nickname { get; set; }
    [InverseProperty("Residents")]
    public virtual ICollection<Town> Residencies { get; set; }
}

y

public class Town
{
    public long TownId { get; set; }
    public String Name { get; set; }
    public virtual ICollection<User> Residents { get; set; }
}

preguntado el 22 de mayo de 12 a las 16:05

3 Respuestas

Necesitas tener clase de mapeo

public class User
{
  public long UserId { get; set; }
  public String Nickname { get; set; }
  public virtual ICollection<TownResidents> TownResidents { get; set; }
}

public class Town
{
  public long TownId { get; set; }
  public String Name { get; set; }
  public virtual ICollection<TownResidents> TownResidents { get; set; }
}

public class TownResidents
{
  public long TownId { get; set; }
  public long UserId { get; set; }

  public virtual Town { get; set; } 
  public virtual User { get; set; } 
}

contestado el 22 de mayo de 12 a las 16:05

No estoy seguro de hacerlo, ya que ef genera una tabla de mapeo para mí y no quiero crear un nuevo objeto y una nueva tabla ya que EF ya lo hace por mí. - cpodiseño

Esta es la forma correcta, también puede verificar la pregunta similar a la suya. stackoverflow.com/questions/10690467/… - Asif Mushtaq

No tiene que crear una nueva entidad para manejar muchas a muchas relaciones. En primer lugar eliminar [InverseProperty("Residents")] . es redundante Tu modelo está bien sin él.

[InverseProperty("Entity")] se requiere si tiene más de una relación 'a muchos' entre sus entidades.

Supongo que su problema radica en cómo está agregando datos relacionados a las entidades. pienso esto artículo te ayudará.

contestado el 22 de mayo de 12 a las 17:05

Extraño, pero lo descubrí al día siguiente: hice los pasos para solucionar el problema:

  1. Taza de café recién hecho :)
  2. borró todo el efectivo en vs (borrar todos los proyectos), Cerró Visual Studio con seguridad
  3. Base de datos eliminada
  4. Abra VS y ejecute el proyecto => este paso creó la base de datos
  5. Importante: NO cambié mi código
  6. Ejecute el proyecto por segunda vez para generar datos ficticios en el sistema
  7. Mi tabla está llena.

Un verdadero rascacabezas...

contestado el 23 de mayo de 12 a las 14:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.