2013-07-12 97 views
2

我有5個實體框架模型,它們都有相互關係。發佈一個新的數據庫很簡單,但試圖通過PUT請求更新它們變得非常混亂。我必須手動進入每個集合並更新正在進行的更改。對現有實體框架對象的PUT請求

 private void updateRelation(Dealer dealer) 
    { 
     var dealerOld = db.Dealers.Include(d => d.Contacts).Single(d => d.DealerID == dealer.DealerID); 
     var contactsNew = dealer.Contacts; 
     List<int> contactIds = new List<int>(); 

     if (dealer.DealerGroup == null || 
      dealerOld.DealerGroup == null || 
      dealer.DealerGroup.DealerGroupID != dealerOld.DealerGroup.DealerGroupID) 
     { 

      if (dealerOld.DealerGroup != null) 
      { 
       DealerGroup d = db.DealerGroups.Find(dealerOld.DealerGroupID); 
       d.Dealers.Remove(dealerOld); 
      } 

     } 

     updateManyToMany(dealer,dealerOld,contactIds,contactsNew); 
    } 

    private void updateManyToMany(Dealer dealer, Dealer dealerOld, List<int> contactIds, ICollection<Contact> contactsNew ) 
    { 

     foreach (var contact in contactsNew) 
     { 
      contactIds.Add(contact.ContactID); 
     } 

     foreach (var contact in dealerOld.Contacts.ToList()) 
     { 
      if (!contactIds.Contains(contact.ContactID)) 
      { 
       dealerOld.Contacts.Remove(contact); 
      } 
     } 

     foreach (int contactId in contactIds) 
     { 
      if (!dealerOld.Contacts.Any(c => c.ContactID == contactId)) 
      { 
       var contact = new Contact() { ContactID = contactId }; 
       dealerOld.Contacts.Add(contact); 
       db.Contacts.Attach(contact); 
      } 
     } 
    } 

有沒有這樣做

回答