Domanda

ho pensato che il seguente compito sarebbe apparentemente facile da codice, ma ho speso un sacco di tempo e non ancora capito il modo giusto per risolverlo. Ecco lo scenario

Ho tre Enti città, località e donatori. Città ha molte località e ogni località ha due uno a molti con il donatore, come indicato di seguito.

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

Nel mio modulo di donatori di modifica che ricevo (Donor Id, residenceLocalityId e officeLocalityId). L'entità dei donatori è in comming stato distaccato dal livello di presentazione. Questo codice non funziona. I vecchi rapporti rimangono intatti.

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();
}

Ancora una cosa che ho provato è il cambiamento della condizione di ResidenceLocality e OfficeLocality a Modified, ma che non ha funzionato neanche. I vecchi rapporti sono rimasti intatti. E in questo caso, dal momento che a cambiare la località, come modificato, devo caricare in aggiunta città per evitare Aggiornamento Eccezione per la località modificato.

Se qualcuno può farmi sapere come modificare uno a molti rapporti (come sopra) per l'entità in stato distaccato ricevuta da livello di presentazione.

È stato utile?

Soluzione

è possibile mantenere entrambi di proprietà di navigazione e la chiave esterna nel modello.

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

se avete le proprietà di chiave esterna non è necessario trovare da id di proprietà di navigazione aggiornamento,

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();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top