Entity Framework no guarda hijos modificados

Frustrante, esto. Aquí hay un par de objetos relacionados, según lo generado por Entity Framework de la base de datos:

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

Aquí está el código al que estoy llamando para guardar un tipo de desarrollo: involucra automapper ya que diferenciamos los objetos de entidad de los 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();
    }

En mi interfaz de usuario, la operación más común será que un usuario vea una lista de Tipos de desarrollo y actualice su Carga predeterminada. Entonces, cuando pruebo esto usando el código anterior, se ejecuta sin error, pero nada cambia realmente.

Si hago una pausa en el depurador, queda claro que la opción DefaultCharge modificada se transfiere a la función, y que se adjunta al DevelopmentType para guardarla.

Pasando a través de él, si cambio el valor manualmente dentro de Visual Studio,hace guardar el valor actualizado. Lo que es aún más confuso.

La supervisión de la base de datos con el Analizador de SQL Server revela que se emiten comandos de actualizaciónsolamente para el objeto padre yno para cualquier objeto adjunto.

Tengo otro código similar en otro lugar que funciona como se espera. ¿Qué estoy haciendo mal aquí?

EDITAR:

Descubrí que si haces esto antes de llamar a SaveDevelopmentType:

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

El cambio a Tipo se guarda, pero el cambio a ChargeableRate no lo hace. No creo que ayude, masivamente, pero pensé que lo agregaría.

Respuestas a la pregunta(7)

Su respuesta a la pregunta