MVC4 C# Remplissage des données dans un viewmodel de la base de données

J'ai un viewmodel qui a besoin de données à partir de deux modèles de la personne et à l'adresse:

Modèles:

public class Person
{
   public int Id { get; set; }
   public string Name { get; set; }
   public int Age { get; set; }
   public int Gender { get; set; }
}

public class Address
{
   public int Id { get; set; }
   public string Street { get; set; }
   public int Zip { get; set; }
   public int PersonId {get; set; }
}

Le Viewmodel est en tant que tel

public class PersonAddViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Street { get; set; }
}

J'ai essayé plusieurs façons d'obtenir des données dans le viewmodel et passer à la vue. Il y aura plusieurs enregistrements retournés à l'écran.

Ma dernière méthode est de peupler le modèle de vue en tant que telle:

private AppContexts db = new AppContexts();
public ActionResult ListPeople()
{
    var model = new PersonAddViewModel();
    var people = db.Persons;
    foreach(Person p in people)
    {
        Address address = db.Addresses.SingleOrDefault(a => a.PersonId == p.Id)
        model.Id = p.Id;
        model.Name = p.Name;
        model.Street = address.Street;
    }
    return View(model.ToList());
}

J'obtiens une erreur sur l'Adresse adresse = db... ligne de "EntityCommandExecutionException a été gérée par le code de l'utilisateur.

Comment pouvez-vous remplir un modèle de vue avec plusieurs enregistrements et de passer à une vue de l'esprit?

Solution Finale:

private AppContexts db = new AppContexts();
private AppContexts dbt = new AppContexts();
public ActionResult ListPeople()
{
    List<PersonAddViewModel> list = new List<PersonAddViewModel>();
    var people = db.Persons;
    foreach(Person p in people)
    {
        PersonAddViewModel model = new PersonAddViewModel();
        Address address = dbt.Addresses.SingleOrDefault(a => a.PersonId == p.Id)
        model.Id = p.Id;
        model.Name = p.Name;
        model.Street = address.Street;
    }
    return View(list);
}
Qu'est-ce que db dans ce cas? Et quel est le message de l'exception? Êtes-vous à l'aide de Entity Framework ou LinqToSql? Quelle que soit db est semble avoir de la difficulté à l'exécution de la commande pour récupérer les données, mais sans plus d'info, il pourrait être n'importe quoi.
S je suis en utilisant entity framework. db est le contexte.
Pourquoi n'utilisez-vous pas les propriétés de navigation?
Je ne suis pas exactement sûr de ce que tu veux dire par les propriétés de navigation? Je l'ai regardé et trouvé que ce serait quelque chose comme ceci dans mon cas public virtuel de Personne à Personne dans mon modèle?
donnez-nous les détails de l'exception?

OriginalL'auteur Xaxum | 2013-04-17