问题描述
所以我正在学习 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 (将#修改为@)