Frage

Ich dachte, die folgende Aufgabe wäre scheinbar leicht zu codieren, aber ich habe viel Zeit verbracht und habe noch nicht den richtigen Weg herausgefunden, um es zu lösen. Hier ist das Szenario

Ich habe drei Einheiten, Ort und Spender. City hat viele Orte und jeder Ort hat zwei ein bis viele Beziehung zu Spender, wie unten angegeben.

public class City {
    public virtual List<Locality> Localities { get; set; }
}

public class Locality {
    public virtual List<Donor> DonorsInOfficeLocality { get; set; }
    public virtual List<Donor> DonorsInResidenceLocality { get; set; }
}

public class Donor : User {
    public virtual Locality OfficeLocality {get;set;}
    public virtual Locality ResidenceLocality { get; set; }
}

In meinem Spender -Bearbeitungsmodul erhalte ich (Spender -ID, ResistenCelocalityId und officelocalityId). Die Spendereinheit befindet sich im abgetrennten Zustand aus der Präsentationsschicht. Dieser Code funktioniert nicht. Die alten Beziehungen bleiben intakt.

public void EditDonor(Donor donor, int residenceLocalityId, int officeLocalityId) {
    Locality residenceLocality = context.Localities.Find(residenceLocalityId);
    donor.ResidenceLocality = residenceLocality;
    Locality officeLocality = context.Localities.Find(officeLocalityId);
    donor.OfficeLocality = officeLocality;
    context.Donors.Attach(donor);
    context.Entry(donor).State = EntityState.Modified;
    context.SaveChanges();
}

Eine weitere Sache, die ich ausprobiert habe, ist die Änderung des Zustands der Residenzelokalität und der Offizierung in modifiziert, aber das hat auch nicht funktioniert. Die alten Beziehungen blieben intakt. Und in diesem Fall muss ich, da ich die Lokalität als modifiziert ändere, zusätzlich die Stadt laden, um die Update -Ausnahme für die geänderte Lokalität zu vermeiden.

Wenn mich jemand wissen lassen kann, wie man eine an viele Beziehungen (wie oben) für Entität im abgetrennten Zustand aus der Präsentationsschicht modifiziert.

War es hilfreich?

Lösung

Sie können sowohl die Navigationseigenschaft als auch den fremden Schlüssel in Ihrem Modell behalten.

public class Locality {
     public int Id{get;set;}
    public virtual List<Donor> DonorsInOfficeLocality { get; set; }
    public virtual List<Donor> DonorsInResidenceLocality { get; set; }
}


public class Donor : User {
    public virtual Locality OfficeLocality {get;set;}
    public int OfficeLocalityId{get;set;}

    public virtual Locality ResidenceLocality { get; set; }
    public int ResidenceLocalityId{get;set;}
}

Wenn Sie über die ausländischen wichtigsten Eigenschaften verfügen, müssen Sie nicht per ID finden, um die Navigationseigenschaften zu aktualisieren.

public void EditDonor(Donor donor, int residenceLocalityId, int officeLocalityId) {
     donner.OfficeLocalityId=officeLocalityId;
     donor.ResidenceLocalityId=residenceLocalityId;
    context.Donors.Attach(donor);
    context.Entry(donor).State = EntityState.Modified;
    context.SaveChanges();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top