Fremdschlüsseleinschränkung, EF mit Auflistung von untergeordneten Objekten

Ich versuche, ein Modell zu aktualisieren, erhalte jedoch den Fehler "Der Vorgang ist fehlgeschlagen: Die Beziehung konnte nicht geändert werden, da eine oder mehrere der Fremdschlüsseleigenschaften nicht auf Null gesetzt werden können Die Fremdschlüsseleigenschaft wird auf einen Nullwert gesetzt.Wenn der Fremdschlüssel keine Nullwerte unterstützt, muss eine neue Beziehung definiert werden, der Fremdschlüsseleigenschaft muss ein anderer Wert zugewiesen werden, der nicht null ist, oder das nicht verknüpfte Objekt muss gelöscht werden . "

Soweit ich das versteheDie Beziehung konnte nicht geändert werden, da eine oder mehrere der Fremdschlüsseleigenschaften nicht nullwertfähig sind Möglicherweise liegt das Problem darin, wie Entity Framework mit meiner virtuellen ICollection umgeht

Ich bin mir jedoch nicht sicher, wie ich die Lösung implementieren soll, wenn ich Scaffolded Repository Pattern verwende. Muss ich die Save () - Methode der ParentObjectRepository-Klasse bearbeiten?

Eigentlich denke ich wirklich, dass es eine Möglichkeit geben muss, EF dies verständlich zu machen. Ich kann nicht sehen, wie das EF-Team dachte: "Wahrscheinlich verwendet niemand eine Sammlung von Objekten mit einer Fremdschlüsselbeschränkung, wir können das nicht unterstützen."

Aktualisieren Code hinzugefügt

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

Mehr Code:

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

Die Save () - Methode stammt aus dem MagnetEventRepository, das aus der obigen Klasse stammt.

Noch ein Update Ich habe den Fehler erfolgreich behoben, indem ich MagnetEventId in AttendeeInformationField in nullable int geändert habe. Wenn ich die Datenbank untersuche, kann ich genau sehen, was falsch ist.

Angenommen, ich habe ein einzelnes AttendeeInformationField mit dem Wert "E-Mail". Wenn ich mein MagnetEvent bearbeite, aktualisiert das AttendeeInformationField die MagnetEventId auf null und fügt dann einen neuen Beitrag mit der korrekten MagnetEventId und dem korrekten Wert hinzu.

Ich würde es sehr bevorzugen, wenn stattdessen die Beiträge in AttendeeInformationField aktualisiert würden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage