Entity Framework Code First: ¿por qué no puedo actualizar propiedades complejas de esta manera?

Estoy trabajando en un pequeño proyecto de muestra usando Entity Framework 4.1 (código primero). Mis clases se ven así:

public class Context : DbContext
{
    public IDbSet<Person> People { get; set; }
    public IDbSet<EmployeeType> EmployeeTypes { get; set; }
}

public class Person
{
    [Key]
    public int Key { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    virtual public EmployeeType EmployeeType { get; set; }
}

public class EmployeeType
{
    [Key]
    public int Key { get; set; }
    public string Text { get; set; }

    virtual public ICollection<Person> People { get; set; }
}

He guardado un par de EmployeeTypes ("first", "second") en la base de datos y he guardado a una persona que tiene el primer tipo. Ahora quiero modificar la Persona. Sé que puedo hacer esto cargando la Persona, cambiando las propiedades y luego guardando. Pero lo que quiero hacer en cambio, que me parece que debería funcionar, es esto:

var c = new Context();
var e = c.EmployeeTypes.Single(x => x.Text.Equals("second"));
var p = new Person { 
            Key = originalKey,       // same key
            FirstName = "NewFirst",  // new first name
            LastName = "NewLast",    // new last name
            EmployeeType = e };      // new employee type
c.Entry(p).State = EntityState.Modified;
c.SaveChanges();

Oddly, esto cambia FirstName y LastName pero no EmployeeType. Si obtengo un nuevo contexto y solicito esta persona, el EmployeeType permanece establecido en "primero" como estaba antes de que se ejecutara este código.

¿Qué debo hacer para actualizar las propiedades de navegación, y no solo las propiedades escalares? (Esto es especialmente desconcertante porque para EmployeeType, lo único que realmente necesita cambiar es la clave externa en la tabla Persona, y esa clave es una propiedad escalar).

(Por cierto, sé que puedo hacer esto recuperando primero a la Persona, luego cambiando las propiedades una por una, pero como estoy usando el enlace de modelo en ASP.NET MVC, parece que esta forma sería más fácil porque Ya tendré el objeto persona actualizado en mi método POST.)

Respuestas a la pregunta(3)

Su respuesta a la pregunta