2009-01-29 7 views
3

J'essaie d'utiliser le modèle de référentiel pour enregistrer une entité à l'aide de Entity Framework. Je ne suis pas clair sur la façon de sauvegarder les propriétés de navigation (comme compte ci-dessous). Quelqu'un peut-il nous éclairer là-dessus? Surtout comment définir le AccountId depuis un contrôleur MVC jusqu'au référentiel où il a été sauvegardé.Comment enregistrer les propriétés de navigation dans Entity Framework

Merci!

--- Exemple de code ---

public void SavePerson(Person person) 
    {   
     if (person != null) 
     { 
      using (xxxxxxEntities bbEntities = new xxxxxxEntities()) 
      { 
       //see if it's in the db 
       Person cPerson; 

       ObjectQuery<Person> persons = bbEntities.Person; 

       cPerson = (from p in persons 
         where p.PersonId == person.PersonId 
         select p).FirstOrDefault() ?? new Person(); 

       //synch it 
       cPerson.Account.AccountId = person.Account.AccountId; //<=== ???? 
       cPerson.Active = person.Active; 
       cPerson.BirthDay = person.BirthDay; 
       cPerson.BirthMonth = person.BirthMonth; 
       cPerson.BirthYear = person.BirthYear; 
       cPerson.CellPhone = person.CellPhone; 
       cPerson.CreatedBy = person.CreatedBy; 
       cPerson.CScore = person.CScore; 

Etc.... 

Répondre

3

Je pense que vous allez peut-être sur ce à la dure. Il y a beaucoup de messages sur le modèle de référentiel, la façon dont cela fonctionne le mieux avec MVC est d'obtenir l'élément, puis de le mettre à jour avec le formulaire, puis de le sauvegarder. Ce que vous faites est de passer l'élément à votre référentiel, de le récupérer et de le mettre à jour avec l'objet.

Mais ce n'est pas le problème que vous avez posé;

cPerson.Account = (from a in Account 
        where a.AccountId.Equals(person.Account.AccountId) 
        select a).FirstOrDefault(); 

Vous devez définir l'objet Compte sur une instance du compte que vous essayez de référencer comme ceci. Vous pouvez, et devriez probablement, extraire ce code dans un référentiel séparé pour le compte, assurez-vous simplement qu'ils partagent le même contexte Entity.

Questions connexes