Ich bekomme einen Fremdschlüsselfehler beim Versuch (wahrscheinlich zu viel) innerhalb einer einzigen SaveChanges.EntityFramework Löschen passiert vor Update beim Einfügen auch
Grundsätzlich habe ich folgende 3 poco-Entitäten so.
public class ClinicianAvailability
{
public int ClinicianAvailabilityId { get; set; }
}
public class SurgicalBooking
{
public int SurgicalBookingId
public int? ClinicianAvailabilityId { get; set; }
public bool IsAdhoc { get; set; }
public virtual TheatreBooking TheatreBooking { get; set; }
public virtual ClinicianAvailability ClinicianAvailability { get; set; }
}
public class TheatreBooking
{
public int TheatreBookingId {get;set;}
public virtual SurgicalBooking SurgicalBooking { get; set; }
public virtual ClinicianAvailability ClinicianAvailability { get; private set; }
}
Ich versuche grundsätzlich eine ClinicianAvailability zu löschen, die einen Fremdschlüssel auf der SurgicalBooking hat. Gleichzeitig aber versuchte ich ein neues TheatreBooking auf dem SurgicalBooking zu setzen.
So:
var entity = _clinicianAvailabilityRepository.Find(resourceAvailabilityId);
var surgStub = surgicalBookingRepository.CreateStub(bookingData.ScheduleId);
surgStub.IsAdhoc = true;
surgStub.ClinicianAvailabilityId = null;
surgicalBookingRepository.SetModified(surgStub, new Expression<Func<SurgicalBooking, object>>[] { x => x.IsAdhoc, x => x.ClinicianAvailabilityId });
theatreBookingRepository.Add(new TheatreBooking
{
TheatreBooking Id = theatreBookingRepository.GetNewTempKey(),
TheatreId = associatedTheatreId.Value,
SurgicalBooking = surgStub
});
theatreBookingRepository.Add(TheatreBooking);
_clinicianAvailabilityRepository.Remove(entity);
_clinicianAvailabilityRepository.UnitOfWork.SaveChanges();
Also im Grunde danach tun bekomme ich einen Fremdschlüssel Fehler auf dem SurgicalBooking Fremdschlüssel von ClinicianAvailabilityId. Wenn ich das Hinzufügen von TheatreBooking wegnehme, geht es in die richtige Reihenfolge, indem ich die chirurgische Buchung aktualisiere und dann lösche. Aber mit dem Hinzufügen der Theaterbuchung versucht es zuerst zu löschen und scheitert dann. Irgendwelche Hilfe dabei? Ich habe versucht, so viel wie möglich zu vereinfachen, aber es ist ein bisschen kompliziert. Ich versuche nicht, mehrere Änderungen zu speichern oder alles in einer einzigen Transaktion zu speichern, da es eine Menge Nacharbeit wäre, um diesen ganzen Code zu ändern.
Ich habe im ChangeTracker gesucht und alle Elemente scheinen in der richtigen Reihenfolge da zu sein, aber es tut es nicht in dieser Reihenfolge.
Überprüfen Sie die Reihenfolge der Löschen Sie zuerst die Tabelle, die den Fremdschlüssel referenziert, dann nur die Haupttabellendaten, prüfen Sie, ob es noch einen Fremdschlüssel r gibt eferences –
Wenn die untergeordneten Elemente mit dem Kontext verknüpft sind, erzeugt EF eine DELETE-Anweisung für jedes angefügte untergeordnete Element und dann für das übergeordnete Element (da Entfernen alle als gelöscht markiert hat) http: // stackoverflow .com/a/16576815/1876572 – Eldho