2009-01-29 84 views
3

我试图使用存储库模式来保存使用实体框架的实体。我不清楚如何保存导航属性(如下面的帐户)。任何人都可以对此有所了解。尤其是如何将AccountId从MVC控制器一直设置到存储它的存储库。如何在实体框架中保存导航属性

谢谢!

---示例代码---

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.... 

回答

3

我觉得自己可能要对这个硬盘的方式。存储库模式中有很多帖子,最适合MVC的方式是获取项目,然后使用表单更新它,然后保存它。你正在做的是将项目传递给你的仓库,再次获取它,然后用对象更新它。

但这不是你问到的问题;

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

您需要将Account对象设置为您试图引用的帐户的实例。您可以并可能应该将此代码提取到该帐户的单独存储库中,只需确保它们共享相同的实体上下文。