Question

Je pensais que la tâche suivante serait apparemment facile à coder, mais je l'ai passé beaucoup de temps et pas encore compris la bonne façon de le résoudre. Voici le scénario

J'ai trois entités Ville, localité et donateurs. Ville a de nombreuses localités et chaque localité a deux un à plusieurs relations avec les donateurs comme indiqué ci-dessous.

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

Dans mon module d'édition des donateurs que je reçois (Id donateurs, residenceLocalityId et officeLocalityId). L'entité de donneur est en comming d'état détaché de la couche de présentation. Ce code ne fonctionne pas. Les anciennes relations restent intactes.

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

Une autre chose que j'ai essayé est de changer l'état de ResidenceLocality et OfficeLocality Modified, mais cela ne fonctionne pas non plus. Les anciennes relations sont restées intactes. Et dans ce cas, étant donné que je change la localité telle que modifiée, je dois charger en outre la ville pour éviter de mise à jour d'exception pour la localité modifiée.

Si quelqu'un peut me faire savoir comment modifier un à plusieurs relations (comme ci-dessus) pour l'entité en état détaché reçu de la couche de présentation.

Était-ce utile?

La solution

you can keep both navigation property and the foreign key in your model.

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

if you have the foreign key properties you don't need to find by id to update navigation properties,

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();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top