0
votes

Comment ajouter à un objet à une liste à l'intérieur d'une base de données via une méthode postale API

donc j'ai 2 classes ici: xxx pré>

et p> xxx pré>

J'essaie de créer un message via l'action du contrôleur suivante, Ce qui crée un nouveau message et l'ajoute à la base de données, puis mettez à jour les iCollectionMessages dans la base de données. p>

contrôleur ici: p>

    [Route("sendMessage")]
    [HttpPost]
    public async Task SendMessage([FromBody] Message message)
    {
        var newMessage = new Message
        {
            MessageContent = message.MessageContent,
            DateCreated = DateTime.Now,
            SenderId = message.SenderId,
            ReceiverId = message.ReceiverId

        };

        _dbContext.Messages.Add(newMessage);

        var user = _dbContext.Users.SingleOrDefault(x => x.UserId == message.SenderId);

        if(user != null)
        {
            var userMessages = user.Messages.ToList();
            userMessages.Add(newMessage);
        }


        await _dbContext.SaveChangesAsync();

    }


3 commentaires

Vous devez charger explicitement des messages pour l'utilisateur _dbcontext.user.include (u => u.messages) .Singleordfault (x => x.userid == message.senderid);


Je pense que vous ajoutez un message à une copie de la collection Messages (en raison de tolist ), alors essayez de faire user.messages.add (newMessage) < / code>


Incroyable! Merci beaucoup ça a fonctionné magnifiquement!


4 Réponses :


0
votes

Essayez de faire comme ça xxx


1 commentaires

Je n'ai pas l'erreur et les messages du message, mais cela ne met pas à jour l'ID utilisateur dans la base de données. Userid est toujours nul



0
votes

Modification:

   ...
   var user = _dbContext.Users.Include(u=>u.Messages).SingleOrDefault(x => x.UserId == message.SenderId);

   if(user != null)
   {
      var userMessages = user.Messages;
      userMessages.Add(newMessage);
   }

   await _dbContext.SaveChangesAsync();


2 commentaires

Hé, merci pour l'entrée mais cela ne semble pas fonctionner. Userid ne met pas à jour. S'il vous plaît voir mon édition pour plus de détails sur ce que j'essaie d'atteindre


UserID dépend de la manière dont vous avez configuré l'identité sur votre modèleBuilder / dBContext. Mettez à jour votre question avec votre dbcontext.



0
votes

Je pense que vous ajoutez un message à une copie de la collection de messages (à cause de TOLIST), essayez donc de faire utilisateur.Messages.add (NewMessage)

user.messages.add (NewMessage)

corrigé par E. SHCHERBO

merci!


0 commentaires

0
votes

Vous ajoutez un nouveau message à une copie de la collection de messages xxx pré>

La déclaration ci-dessus crée une nouvelle liste pour les données, donc je l'appellerais comme p>

 user.Messages.Add(newMessage);


0 commentaires