Mi problema resultó tener dos contextos. Rehice mi código un poco para tener solo un contexto y mi problema desapareció.Código Entity Framework Primero Muchos a muchos crear filas duplicadas
Tengo un usuario que tiene una lista de UserContact que tiene una Opción de contacto. Es bastante simple 1 a muchos, muchos a 1 con la tabla UserContact en el medio.
Si saco al usuario del archivo db y creo un nuevo UserContact, pero configuro ContactOption para un elemento existente (que saqué del db), cuando SaveChanges, entity framework crea una nueva ContactOption en la base de datos que es esencialmente un duplicado de la que agregué al UserContact (con la excepción de que obtiene una nueva identificación).
He luchado con esto durante varias horas y no puedo resolver esto. ¿Algunas ideas?
Estoy usando un patrón de Repositorio para mis consultas a la base de datos, pero me he asegurado de que estén compartiendo el mismo contexto.
me tire el usuario de la base de datos con esto:
var user = _context.Users.Include("UserContacts.ContactOption")
.Where(id => id == 1);
y el contacto opciones son sacados con:
var co = _context.ContactOptions.FirstOrDefault(c => c.Id == id);
Y añado el ContactOption a la UserContact así:
var contactOption = _context.ContactOptions.FirstOrDefault(c => c.Id == someId);
var contact = new UserContact { ContactOption = contactOption };
contact.Data = "someData";
user.UserContacts.Add(contact);
Mi modelo se ve así:
public class User
{
[Key]
public int Id { get; set; }
public virtual ICollection<UserContact> UserContacts { get; set; }
}
public class UserContact
{
[Key]
public int Id { get; set; }
[Required]
public User User { get; set; }
[Required]
public ContactOption ContactOption { get; set; }
public string Data { get; set; }
}
public class ContactOption
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
puede mostrar el código donde asocia la Opción de Contacto al UserContact –
Justin, he actualizado la pregunta como se le solicitó. ¡Gracias! –