MVC4 de Rasoir dans la liste déroulante de la liaison avec les clés étrangères

Alors que je voulais avoir une compréhension plus profonde. J'ai ajouté un peu plus de fonctionnalités pour le MSFT tutoriel sur la MVC4 que vous pouvez trouver ici (http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4)

Le modèle est très simple. Vous avez des films et des réalisateurs. Chaque film a 1 directeur max.

Je veux que l'utilisateur soit en mesure d'attribuer un directeur d'un film à partir d'une liste déroulante et de l'enregistrer mais de toute façon le film est sauvé par une valeur null Director_ID champ dans la base de données.

Voici mes modèles simples:

public class Movie
{
    public int ID { get; set; }
    [Required]
    public string Title { get; set; }
    public DateTime ReleaseDate { get; set; }
    [Required]        
    public string Genre { get; set; }
    public decimal Price { get; set; }        
    public string Ranking { get; set; }
    public Director Director { get; set; }        
}

public class Director
{
    public int ID { get; set; }
    public string Name { get; set; }
}

Quand le film le tableau est généré, il est livré avec un Director_ID champ. Sweet!

Je voudrais à l'utilisateur de sélectionner un administrateur lors de l'édition d'un film forme d'une liste déroulante de sorte
dans le film de modifier la vue, j'ai réussi à lier une liste déroulante à une liste de tous les administrateurs obtenus auprès de la base de données

    <div class="editor-field">
        @Html.DropDownListFor(model => model.Director.ID, ViewBag.Directors as List<SelectListItem>, "All")            
    </div>

Contrôleur:

    //GET
    public ActionResult Edit(int id = 0)
    {
        var DirectorsList = new List<SelectListItem>();

        var DirQuery = from d in db.Directors select d;
        foreach (var d in DirQuery)
        {
            DirectorsList.Add(new SelectListItem { Value = d.ID.ToString(), Text = d.Name });
        }
        ViewBag.Directors = DirectorsList;

        Movie movie = db.Movies.Find(id);
        if (movie == null)
        {
            return HttpNotFound();
        }
        return View(movie);
    }

- Je obtenir mon liste de tous les administrateurs dans ma liste déroulante. Tout droit!

Maintenant, quand je enregistrer le film :

    [HttpPost]
    public ActionResult Edit(Movie movie)
    {
        if (ModelState.IsValid)
        {
            movie.Director = db.Directors.Find(movie.Director.ID); 
            db.Entry(movie).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(movie);
    }

L'argument du film que la méthode Edit reçoit est livré avec un Directeur de la propriété (comme je l'ai spécifié dans le modèle), quand je navigue en elle, je vois les deux propriétés directeur:
"ID": qui vient avec la bonne valeur sélectionnée par l'utilisateur du formulaire de la liste déroulante, et "Nom": null.
Comme vous pouvez le voir dans le code que j'ai chercher toute la directrice forme d'objet de la base de données correspondant à la liste déroulante de la valeur et de l'enregistrer

Le problème est que lors de l'enregistrement du film, la clé étrangère sur les Films de la table (Director_ID) n'est jamais mis à jour.

Ce que je fais mal? Est-il meilleure approche pour ce faire?

OriginalL'auteur Alejandro Lozdziejski | 2012-12-27