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.