2009-01-29 44 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對象設置爲您試圖引用的帳戶的實例。您可以並可能應該將此代碼提取到該帳戶的單獨存儲庫中,只需確保它們共享相同的實體上下文。