Restrição de chave estrangeira, EF com coleção de objetos filho

Estou tentando atualizar um modelo, mas recebo o erro "A operação falhou: o relacionamento não pôde ser alterado porque uma ou mais propriedades de chave estrangeira não são anuláveis. Quando uma alteração é feita em um relacionamento, o relacionado propriedade de chave estrangeira é definida como um valor nulo.Se a chave externa não suportar valores nulos, um novo relacionamento deve ser definido, a propriedade de chave estrangeira deve receber outro valor não nulo ou o objeto não relacionado deve ser excluído "

Pelo que eu entendiO relacionamento não pôde ser alterado porque uma ou mais propriedades de chave estrangeira não são anuláveis o problema pode estar em como o Entity Framework manipula minha ICollection virtual

No entanto, não tenho certeza de como implementar a solução ao usar o padrão de repositório scaffolded. Eu tenho que editar o Save () - método ParentObjectRepository-class?

Na verdade, eu realmente acho que deve haver alguma maneira de fazer a EF entender isso. Não consigo ver como a equipe da EF estava pensando "Provavelmente, ninguém está usando uma coleção de objetos com uma restrição de chave estrangeira, não vamos suportar isso".

Atualizar Código adicionado

<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>

Mais 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>

O Save () - método é de MagnetEventRepository, que é scaffolded da classe acima.

Outra atualização Eu removi o erro com sucesso alterando MagnetEventId em AttendeeInformationField para int anulável. Ao examinar o banco de dados, posso ver exatamente o que está errado.

Digamos que eu tenha um único AttendeeInformationField com o valor "E-mail". Quando edito meu MagnetEvent, o AttendeeInformationField atualiza o MagnetEventId para nulo e, em seguida, adiciona um novo post com o MagnetEventId e Value corretos.

Eu preferiria muito que as postagens no AttendeeInformationField fossem atualizadas.

questionAnswers(4)

yourAnswerToTheQuestion