Ograniczenie klucza obcego, EF z kolekcją obiektów potomnych

Próbuję zaktualizować model, ale otrzymuję błąd „Operacja nie powiodła się: relacji nie można zmienić, ponieważ jedna lub więcej właściwości klucza obcego jest niezawierająca wartości pustych. właściwość klucza obcego jest ustawiona na wartość pustą Jeśli klucz obcy nie obsługuje wartości pustych, musi zostać zdefiniowana nowa relacja, właściwość klucza obcego musi mieć przypisaną inną wartość inną niż null lub niepowiązany obiekt musi zostać usunięty . ”

Z tego co rozumiemNie można zmienić relacji, ponieważ jedna lub więcej właściwości klucza obcego jest niezawierająca wartości null problem może dotyczyć sposobu, w jaki Entity Framework obsługuje moją wirtualną kolekcję

Jednak nie jestem pewien, jak zaimplementować rozwiązanie przy użyciu wzorca repozytorium rusztowań. Czy muszę edytować klasę Save () - ParentObjectRepository-class?

Właściwie naprawdę uważam, że musi istnieć jakiś sposób, aby EF to zrozumiał. Nie widzę, jak zespół EF myślał: „Prawdopodobnie nikt nie używa zbioru obiektów z ograniczeniem klucza obcego, nie popierajmy tego”.

Aktualizacja Dodano kod

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

Więcej kodu:

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

Metoda Save () - pochodzi z MagnetEventRepository, która jest rusztowana z powyższej klasy.

Kolejna aktualizacja Pomyłkę usunąłem, zmieniając MagnetEventId w AttendeeInformationField na nullable int. Badając bazę danych, widzę, co jest nie tak.

Powiedzmy, że mam jedno pole AttendeeInformationField o wartości „E-mail”. Kiedy edytuję mój MagnetEvent, AttendeeInformationField aktualizuje MagnetEventId do wartości null, a następnie dodaje nowy post z poprawnym MagnetEventId i Value.

Wolałbym, aby zamiast tego wpisy w AttendeeInformationField zostały zaktualizowane.

questionAnswers(4)

yourAnswerToTheQuestion