2 votes

Requête PUT sur des objets Entity Framework existants

J'ai 5 modèles de framework d'entité et ils ont tous des relations les uns avec les autres. Poster un nouveau dans la base de données est simple, mais essayer de les mettre à jour via une requête PUT devient vraiment compliqué. Je dois aller manuellement dans chaque collection et mettre à jour ce qui est modifié.

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

        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 contactIds, ICollection 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);
            }
        }
    }

y a-t-il un moyen plus simple de faire cela

0voto

tne Points 1452

Il y a beaucoup d'autres questions liées à cela, vous voudrez peut-être passer un peu de temps à trier les réponses pour trouver des solutions temporaires en attendant, ou attendre une réponse plus utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X