2013-07-12 53 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); 
      } 
     } 
    } 

有没有这样做

回答