Вопрос

Я думал, что следующая задача, казалось бы, была бы легко кодировать, но я потратил много времени и еще не выяснил правильный способ ее решить. Вот сценарий

У меня есть три организации, местность и донор. В городе много населенных пунктов, и в каждом населенном пункте есть две отношения с донором, как приведено ниже.

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

В моем модуле редактирования донора я получаю (ID Donor, ResidencelocalityId и OfficeLocalityID). Донорская сущность находится в отдельном государстве, подходящем от презентационного уровня. Этот код не работает. Старые отношения остаются нетронутыми.

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

Еще одна вещь, которую я попробовал, - это изменение состояния ResidenceLocality и OfficeLocality, чтобы модифицировать, но это тоже не сработало. Старые отношения остались нетронутыми. И в этом случае, поскольку я меняю локальность в качестве модифицированного, я должен дополнительно загрузить город, чтобы избежать обновления исключения для модифицированной местности.

Если кто -то может дать мне знать, как изменить один на многие отношения (как указано выше) для организации в отдельном состоянии, полученном с презентационного уровня.

Это было полезно?

Решение

Вы можете сохранить как навигационное свойство, так и внешний ключ в своей модели.

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

Если у вас есть свойства иностранного ключа, которые вам не нужно найти с помощью ID для обновления навигационных свойств,

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();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top