Entity Framework nie zapisuje zmodyfikowanych dzieci

Frustrujące, to. Oto para powiązanych obiektów, wygenerowanych przez bazę danych Entity Framework:

public partial class DevelopmentType
{
    public DevelopmentType()
    {
        this.DefaultCharges = new HashSet<DefaultCharge>();
    }

    public System.Guid RowId { get; set; }
    public string Type { get; set; }

    public virtual ICollection<DefaultCharge> DefaultCharges { get; set; }
}

public partial class DefaultCharge
{
    public System.Guid RowId { get; set; }
    public decimal ChargeableRate { get; set; }
    public Nullable<System.Guid> DevelopmentType_RowId { get; set; }

    public virtual DevelopmentType DevelopmentType { get; set; }
}

Oto kod, który wywołam, aby zapisać DevelopmentType - dotyczy automappera, ponieważ odróżniamy obiekty encji od DTO:

    public void SaveDevelopmentType(DevelopmentType_dto dt)
    {
        Entities.DevelopmentType mappedDevType = Mapper.Map<DevelopmentType_dto, Entities.DevelopmentType>(dt);
        _Context.Entry(mappedDevType).State = System.Data.EntityState.Modified;

        _Context.DevelopmentTypes.Attach(mappedDevType);
        _Context.SaveChanges();
    }

W moim interfejsie użytkownika najczęstszą operacją będzie wyświetlenie listy DevelopmentTypes przez użytkownika i zaktualizowanie jego DefaultCharge. Więc kiedy testuję to używając powyższego kodu, działa bez błędu, ale tak naprawdę nic się nie zmienia.

Jeśli zatrzymam się w debuggerze, jasne jest, że zmieniony DefaultCharge jest przekazywany do funkcji i że jest dołączony do typu DevelopmentType, który ma zostać zapisany.

Przechodząc przez to, jeśli zmienię wartość ręcznie w studio wizualnym, torobi zapisz zaktualizowaną wartość. Co jest jeszcze bardziej mylące.

Monitorowanie bazy danych za pomocą SQL Server Profiler ujawnia, że ​​wydawane są polecenia aktualizacjitylko dla obiektu nadrzędnego inie dla wszelkich dołączonych obiektów.

Mam inny podobny kod, który działa zgodnie z oczekiwaniami. Co ja tu robię źle?

EDYTOWAĆ:

Odkryłem, że jeśli zrobisz to przed wywołaniem SaveDevelopmentType:

        using (TransactionScope scope = new TransactionScope())
        {
            dt.Type = "Test1";
            dt.DefaultCharges.First().ChargeableRate = 99;
            _CILRepository.SaveDevelopmentType(dt);
            scope.Complete();
        }

Zmiana na Type zapisuje, ale zmiana na ChargeableRate nie. Nie sądzę, żeby to pomogło, masowo, ale pomyślałem, że to dodam.

questionAnswers(7)

yourAnswerToTheQuestion