2017-10-20 9 views
0

J'ai trois modèles dans le noyau .net 1.1 MVC.imbriqué inclut dans le noyau. NET 1.1

  1. Communications

    public class Communication 
    { 
        public Guid CommunicationId { get; set; } 
        public string Subject { get; set; } 
        public bool IsRead { get; set; } = false; 
        public Guid UserId { get; set; } 
        public Guid AssignedTo { get; set; } 
        public DateTime CreatedAt { get; set; } = DateTime.Now; 
        public DateTime UpdatedAt { get; set; } = DateTime.Now; 
        public Nullable<DateTime> DeletedAt { get; set; } 
        public virtual ICollection<Message> Messages {get; set;} 
    } 
    
  2. Messages

    public class Message 
    { 
        public Guid MessageId { get; set; } 
        public Guid CommunicationId { get; set; } 
        public Guid SenderId { get; set; } = new Guid(); 
        public Guid ReceiverId { get; set; } = new Guid(); 
        public string Body { get; set; } 
        public DateTime CreatedAt { get; set; } = DateTime.Now; 
        public DateTime UpdatedAt { get; set; } = DateTime.Now; 
        public Nullable<DateTime> DeletedAt { get; set; } 
    } 
    
  3. Utilisateurs

SenderID et ReceiverID dans le tableau des messages est UserID dans le tableau des utilisateurs. Relation entre les modèles: Communications has_many Messages. message belongs_to une communication message belongs_to un utilisateur via SenderID message blongs_to un utilisateur via ReceiverId

Voici mon contrôleur ressemble à:

_context.Communications.Include(c=> c.Messages) 

Je veux générer un objet JSON comme ceci: {communicationId : 'xxx', messages [{messageId: 'xxx', expéditeur: {informations utilisateur va ici}, destinataire: {informations utilisateur va ici}}

Comment inclure un objet Utilisateur dans un objet Message?

Merci pour l'aide.

Répondre

1

Ajoutez deux propriétés de type Users à la table Message et utilisez-les pour définir vos relations sur SenderId et ReceiverId respectivement sur la table Users.

public virtual Users Sender { get; set; } 
public virtual Users Receiver { get; set; } 

Ensuite, changez votre requête comme ceci

_context.Communications.Include(c => c.Messages).Include("Message.Users"); 
+0

Salut Morgan. encore une question. Comment puis-je trouver toutes les communications pour un utilisateur donné? par exemple. Mon message a un senderId et ReceiverId. var communications = wait _context.Communications.Include (c => c.Messages) . Où (m => m.Messages.senderId == id || m.Messages.ReceiverId == id) .ToListAsync(); Ce n'est pas la bonne syntaxe. ce que ça devrait être? Merci –

+0

Pourquoi n'utilisez-vous pas 'ThenInclude'? –

+0

Je crois que ThenInclude n'est pas la bonne solution pour mon problème. Les messages sont une icollection. J'ai besoin d'un moyen d'interroger l'objet icollection –