浏览 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 (将#修改为@)