private void RemoveFromReferential(IPreconstructedDeckCardEdition preconstructedDeckCardEdition)
 {
     if (!_preconstructedDeckCards.TryGetValue(preconstructedDeckCardEdition.IdPreconstructedDeck, out IList <IPreconstructedDeckCardEdition> list))
     {
         list.Remove(preconstructedDeckCardEdition);
     }
 }
        public void InsertOrUpdatePreconstructedDeckCardEdition(int idPreconstructedDeck, int idGatherer, int count)
        {
            using (new WriterLock(_lock))
            {
                if (GetPreconstructedDeck(idPreconstructedDeck) == null)
                {
                    return;
                }

                IPreconstructedDeckCardEdition preconstructedDeckCard = GetPreconstructedDeckCard(idPreconstructedDeck, idGatherer);
                if (preconstructedDeckCard == null)
                {
                    //Insert new
                    if (count <= 0)
                    {
                        return;
                    }

                    PreconstructedDeckCardEdition newPreconstructedDeckCardEdition = new PreconstructedDeckCardEdition
                    {
                        IdPreconstructedDeck = idPreconstructedDeck,
                        IdGatherer           = idGatherer,
                        Number = count
                    };


                    AddToDbAndUpdateReferential(newPreconstructedDeckCardEdition, InsertInReferential);

                    return;
                }

                //Update
                if (count < 0 || count == preconstructedDeckCard.Number)
                {
                    return;
                }

                if (preconstructedDeckCard is not PreconstructedDeckCardEdition updatePreconstructedDeckCardEdition)
                {
                    return;
                }

                if (count == 0)
                {
                    RemoveFromDbAndUpdateReferential(updatePreconstructedDeckCardEdition, RemoveFromReferential);

                    return;
                }

                updatePreconstructedDeckCardEdition.Number = count;

                using (IDbConnection cnx = _databaseConnection.GetMagicConnection())
                {
                    Mapper <PreconstructedDeckCardEdition> .UpdateOne(cnx, updatePreconstructedDeckCardEdition);
                }
            }
        }
        private void InsertInReferential(IPreconstructedDeckCardEdition preconstructedDeckCardEdition)
        {
            if (!_preconstructedDeckCards.TryGetValue(preconstructedDeckCardEdition.IdPreconstructedDeck, out IList <IPreconstructedDeckCardEdition> list))
            {
                list = new List <IPreconstructedDeckCardEdition>();
                _preconstructedDeckCards.Add(preconstructedDeckCardEdition.IdPreconstructedDeck, list);
            }

            if (list.Contains(preconstructedDeckCardEdition))
            {
                throw new Exception("Invalid addition");
            }

            list.Add(preconstructedDeckCardEdition);
        }