Restricción de clave externa, EF con colección de childobjects

Estoy intentando actualizar un modelo, pero aparece el error "Falló la operación: la relación no se pudo cambiar porque una o más de las propiedades de clave foránea no son anulables. Cuando se realiza un cambio en una relación, la propiedad de clave foránea se establece en un valor nulo. Si la clave foránea no admite valores nulos, debe definirse una nueva relación, la propiedad de clave foránea debe tener asignado otro valor no nulo o el objeto no relacionado debe eliminarse . "

De lo que entiendo desdeLa relación no se pudo cambiar porque una o más de las propiedades de clave foránea no son anulables El problema podría estar en cómo Entity Framework maneja mi ICollection virtual

Sin embargo, no estoy realmente seguro de cómo implementar la solución cuando se usa un patrón de repositorio con andamiaje. ¿Tengo que editar el método Save () - clase ParentObjectRepository-class?

En realidad, realmente creo que debe haber alguna manera de hacer que EF entienda esto. No puedo ver cómo pensaba el equipo de EF "Probablemente, nadie está usando una colección de objetos con una restricción de clave externa, no lo admitimos".

Actualizar Código añadido

<code>[HttpPost]
public ActionResult Edit(int id, FormCollection formCollection)
{
    var eventRepository = new MagnetEventRepository();
    var original = eventRepository.Find(id);
    UpdateModel(original);
    eventRepository.Save();
    return RedirectToAction("Details", "Home", new { slug = original.Slug });
}

public void Save()
{
    context.SaveChanges();
}
</code>

Más código:

<code>public class MagnetEvent
{
    public virtual int Id { get; set; }

    [Required]
    public virtual string Name { get; set; }

    [Required]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd HH:mm}")]
    [DataType(DataType.DateTime)]
    public virtual DateTime? StartDate { get; set; }

    public virtual string Description { get; set; }

    [StringLength(100)]
    public virtual string Slug { get; set; }

    public virtual int MaximumCapacity { get; set; }

    [DataType(DataType.Currency)]
    public virtual int TicketPrice { get; set; }

    public virtual int LocationId { get; set; }
    public virtual Location Location { get; set; }

    public virtual Collection<Ticket> Tickets { get; set; }

    public virtual Collection<AttendeeInformationField> CaptureAttendeeInformationFields { get; set; }

    public virtual int CustomerId { get; set; }

    [Required]
    public virtual CUSTOMER Customer { get; set; }
}
</code>

El método Save () es de MagnetEventRepository, que se basa en la clase anterior.

Otra actualización Eliminé exitosamente el error cambiando MagnetEventId en AttendeeInformationField a nullable int. Al examinar la base de datos puedo ver exactamente lo que está mal.

Digamos que tengo un solo AttendeeInformationField con el valor "Correo electrónico". Cuando edito mi MagnetEvent, el AttendeeInformationField actualiza el MagnetEventId a nulo y luego agrega una nueva publicación con el MagnetEventId y el valor correctos.

Preferiría mucho si las publicaciones en AttendeeInformationField se actualizaran en su lugar.

Respuestas a la pregunta(4)

Su respuesta a la pregunta