微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

浏览 EF Core 中的第三个模型

如何解决浏览 EF Core 中的第三个模型

所以我正在学习 ASP.Net 和 EF Core,并决定在此过程中制作一个项目。我决定制作一个简单的社交网络。

这里是我需要链接的三个模型(不是完整模型,我只展示了需要的道具):

public class User : IdentityUser
{
    public List<GroupChat> GroupChats { get; set; } // nav prop that leads to this user's group chats
}

public class GroupChat
{
    public List<GroupChatUser> Members { get; set; } // nav prop that leads to this gc members
}

public class GroupChatUser
{
    public User User { get; set; } // nav prop that leads to the global user
    public GroupChat GroupChat { get; set; } // nav prop that leads to the gc of this member
    public string PermissionGroup { get; set; } // e.g. Administrator,Moderator,Default
}

这里是这个问题所需的所有数据。显然这些模型还有其他数据,这就是为什么我不能简单地使用 List<User> Members,因为 GroupChatUser 有其他与此聊天相关的数据。用户用于整个应用程序(它们包含例如电子邮件、密码等),而 GroupChatUsers 用于一个群聊(它们包含例如该特定群聊中该特定用户的权限(角色)、昵称、等)。

如您所知,我无法为上述模型定义关系,因为需要有 List<User> Members 才能定义多对多关系。

但是很明显,特定群聊中特定用户只有一个GroupChatUser,所以应该有类似这样的关系定义方式:GroupChat <-> GroupChatUser <-> User,而且需要透明,所以我可以直接从用户访问 GroupChats。

所以现在我需要在 User 模型中定义 List<GroupChatUser> GroupChatUsers,然后访问 GroupChatUser 的 GroupChat 属性,这很好,但也不是很方便。

我希望我的描述正确。

为了更清楚一点,我希望能够写出这样的代码(半伪代码):


User user = _dbContext.Users
                     // All the necessary Includes/ThenIncludes/Selects. Imagine that all the necessary data is projected successfully.
                     .FirstOrDefault(...); // We got the current logged in user with all necessary properties loaded

foreach (GroupChat groupChat in user.GroupChats) {
    Console.WriteLine($"User '{user.UserName}' has a group chat with title '{groupChat.Title}'");
    Console.WriteLine($"It has {groupChat.Members.Count} members: ");
    foreach (GroupChatUser member in groupChat.Members) {
        Console.WriteLine($"  - {member.User.UserName}: Group = '{member.PermissionGroup}'");
    }
}

代码可能会产生如下结果:

User 'AdminTestAccount' has a group chat with title 'First Group Chat in this social network'
It has 3 members:
  - AdminTestAccount: Group = Administrators
  - John_Travis: Group = Default
  - jbdxcz12431: Group = Default
User 'AdminTestAccount' has a group chat with title 'Support Chat'
It has 7 members:
  - AdminTestAccount: Group = Administrators
  - John_Travis: Group = Moderators
  - jbdxcz12431: Group = Moderators
  - SuperUser123: Group = Default
  - mike_harris_1983: Group = Default
  - abcdefgh123: Group = Default
  - not_admin1341: Group = Default

如您所见,John_Travis 在一个群聊中是认设置,而在另一个群聊中是认设置。我无法在 GroupChat 中用 List<User> Members 复制。

希望这个“澄清”不会使问题进一步复杂化。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。