繁体   English   中英

如何在 EF Core 中创建 3 个实体之间的关系?

[英]How to create a relation between 3 entities in EF Core?

我想用 EF Core 构建一个聊天应用程序,它由 3 个实体组成: user, chat & message

每个用户都应该包含他所在的所有聊天的列表。每个聊天都应该包含聊天中的两个用户以及聊天中发送的所有消息。 每条消息都应包含聊天、发送消息和发送消息的用户。

这些是我当前的实体:

public class User
{
    public string Id { get; set; }
    public string Name { get; set; }
    public List<Chat> Chats { get; set; }
}

public class Chat
{
    public string Id { get; set; }
    public User User1 { get; set; }
    public User User2 { get; set; }
    public List<Message> Messages { get; set; }
}

public class Message
{
    public string Id { get; set; }
    public string Text { get; set; }
    public User Sender { get; set; }
    public Chat Chat { get; set; }
}

我尝试了很多东西,但没有任何效果。

将您的 model 更改为

public class Chat
{
    public string Id { get; set; }
    public List<User> Users{ get; set; }
    public List<Message> Messages { get; set; }
}

你有一个简单的多对多关系。

您好,这是与 EF Core 建立关系的正确方法。

public class User
{
    public User()
    {
         this.Chats = new HashSet<Chat>();
    }

    public string Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Chat> Chats  { get; set; }
 
}

public class Chat
{
    public Chat()
    {
         this.Users = new HashSet<User>();
         this.Messages = new HashSet<Message>();
    }

    public string Id { get; set; }

    public virtual ICollection<User> Users { get; set; }
    public virtual ICollection<Message> Messages { get; set; }
}

public class Message
{
    public string Id { get; set; }
    public string Text { get; set; }

    public string ChatId { get; set; }
    public Chat Chat { get; set; }
}

您可以通过聊天中的用户集合访问用户。 您还可以通过 User 中的 Chats 属性访问当前用户的 Chats

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM