多对多关系-获得所有对象链接到另一个

本文关键字:对象 链接 另一个 关系 | 更新日期: 2023-09-27 18:15:53

我有两个类:

public class User
{
    public User()
    {
        this.Groups = new List<Group>();
    }
    public long Id { get; set; }
    public string Name { get; set; }
    public IList<Group> Groups { get; set; }
}

public class Group
{
    public Group()
    {
        this.Users = new List<User>();
    }
    public long Id { get; set; }
    public string Name { get; set; }
    public IList<User> Users { get; set; }
}

我通过使用连接表定义了一个与OpenAccess的多对多关系:

mapping.HasAssociation(user => user.Groups).WithOpposite(group => group.Users).MapJoinTable("UserGroup", (user, group) => new
            {
                UserId = user.Id,
                GroupId = group.Id
            });

我想获得与组x相关联的所有用户。

如何编写linq请求?

我最后想删除组x后,删除所有链接(用户/组)到该组。或者是否可以通过级联删除自动删除?我对这两个解决方案很感兴趣。

多对多关系-获得所有对象链接到另一个

您可以使用下面的示例代码从Group中选择Users

var allUserInGroup = Group.Where(group => group.Id == id).Select(group => group.Users).ToList();

删除部分:

if(!group.Any(g => g.Users))  {  // assume group is IQueryable/IEnumerable
   context.Group.Remove(group);
   context.SaveChanges();
}