2016-06-15 24 views
1

Ich bin ein Anfänger mit EF und obwohl ich es geschafft habe, es erfolgreich zu verwenden, kann ich ein einfaches Problem nicht verstehen, das ich jetzt gerade gegenüberstelle.Assoziation zwischen Entitäten - EntityFramework

Ich habe die folgenden Tabellen in meinem Projekt.

MessageUser Tabelle

 public MessageUser() 
    { 
     this.Conversation = new HashSet<Conversation>(); 
    } 
    public int MessageUserID { get; set; } 
    public string ConnectionID { get; set; } 
    public string UserName { get; set; } 
    public ICollection<Conversation> Conversation { get; set; } 

ChatMessage Tabelle

public class ChatMessage 
{ 
    public int ChatMessageID { get; set; } 

    public string Username { get; set; } 

    public string Message { get; set; } 

    public bool DeliveryStatus { get; set; } 

    public DateTime CreatedAt { get; set; } 

    public int ConversationID { get; set; } 

    [ForeignKey("ConversationID")] 
    public Conversation Conversation { get; set; } 
} 

Conversation Tabelle

public class Conversation 
{ 
    public Conversation() 
    { 
     ChatMessages = new List<ChatMessage>(); 
     MessageUsers = new List<MessageUser>(); 
    } 
    public int ConversationID { get; set; } 
    public DateTime CreatedAt { get; set; } 
    public ICollection<MessageUser> MessageUsers { get; set; } 
    public ICollection<ChatMessage> ChatMessages { get; set; } 
} 

Die Tabelle "ChatMessage" und die Tabelle "Conversation" haben eine Eins-Viele-Beziehung, während "Conversation" und "MessageUser" eine Viele-Viele-Beziehung haben. Ich versuche, die Daten zu speichern, wie folgt:

 DataModel db = new DataModel(); 
     List<MessageUser> ConnectedUsers = db.MessageUsers.ToList(); 
     ChatMessage message = new ChatMessage { CreatedAt = DateTime.Now, DeliveryStatus = true, Message = "Hello My name is Mujtaba", Username = "Mujtaba" }; 
     Conversation conversation = new Conversation(); 
     conversation.ChatMessages.Add(message); 
     conversation.CreatedAt = DateTime.Now; 
     foreach (var user in ConnectedUsers) 
     { 
      conversation.MessageUsers.Add(user); 
     } 

Was ich versuche zu verstehen, wenn ich einen ‚MessageUser‘ zur Sammlung Eigenschaft ‚Gespräch‘ hinzufügen, warum nicht eine inverse Beziehung ist etabliert? Nach dem Hinzufügen der Entität zur Sammlung sollte die Sammlungseigenschaft dieser Entität auch das Objekt in ihrer Sammlung anzeigen, zu dem sie hinzugefügt wurde.

enter image description here

Im Bild oben die Sammlung Eigentum des Unternehmens, die zu ‚Conversation‘ Tabelle hat 0 ‚Conversation‘ Objekte hinzugefügt wurden. Soll es so sein oder mache ich etwas falsch?

+0

Entity-Framework ist standardmäßig faul, wie wäre es mit dem Versuch, die Conversation beim Abrufen der MessageUsers aufzunehmen. d. h. so etwas wie diese Liste ConnectedUsers = db.MessageUsers.Include (x => x.Conversation) ToList(); – Rangesh

+0

Oh yeah das funktioniert :) Die Zuordnung wurde nach dem Speichern des Objekts in der Datenbank festgelegt. Es spielt keine Rolle, ob die Assoziation reflektiert wird oder nicht. Aber danke für Ihre Hilfe :) Achten Sie darauf, in den Kommentar unten zu schreiben, damit ich es als richtige Antwort markieren kann. –

Antwort

2

Entity Framework ist standardmäßig faul, wie wäre es mit dem Versuch, die Conversation beim Abrufen der MessageUsers aufzunehmen. das heißt so etwas wie diese

List<MessageUser> ConnectedUsers = db.MessageUsers.Include(x=>x.Conversation)ToList() 

Wie Sie im Kommentar darauf hingewiesen, ist die Vereinigung/Mapping alles gut und das ist die Art und Weise EF standardmäßig arbeitet (faul).

Verwandte Themen