ADO.net - 复杂数据绑定

时间:2012-10-16 17:49:48

标签: c# .net database vb.net ado.net

我正在处理一个我自己无法解决的问题。我也试图在网上找到解决方案,但没有成功。

详情......

它涉及复杂的数据绑定(在本例中为3个数据库表)。

这里有我的表(抽象),试图调节用户/组关联

Table 1 - tblUsers
------------------------------
field1: Id
field2: Username
field3: Password

Table 2 - tblGroups
------------------------------
field1: Id
field2: GroupName
field3: Description

Table 3 - tblUsers_Groups
------------------------------
field1: Id
field2: Id_tblUsers
field3: Id_tblGroups

这样一个用户就可以属于多个组(和副)

我一直在尝试创建一个WinForm,就像Master - Detail类,Master Grid应该在tblUsers中显示用户,并且...根据我在那里选择的内容,在Details Grid中显示,组选择的用户属于...但使用tblGroups中的信息

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

第一张表3不应该有ID和 使用Id_tblUsers,Id_tblGroups

的复合键

在.NET中我的方式是

    public class UserGroup : Object
    {   // NO editing just add remove
        public User User { get; private set; }
        public Group Group { get; private set; }
        public override bool Equals(Object obj)
        {
            //Check for null and compare run-time types.
            if (obj == null || !(obj is UserGroup)) return false;
            UserGroup item = (UserGroup)obj;
            return (User.ID == item.User.ID && Group.ID == item.Group.ID);
        }
        public override int GetHashCode() { return (User.ID & 0xffff) + (Group.ID << 16); }
        public UserGroup(User user, Group group)
        { User = user; Group = group; }
    }

创建UsersGroups的HashSet并将其传递给ctor中的Group和User 它只是对对象的引用,因此每个人都引用相同的数据 覆盖GetHash的效率和等于,因此不能在HashSet中有重复的UserGroup。

用于返回用户所在群组的代码

public List<Group> Groups
{   get { return usersGroups.Where(x => x.User == this)
                            .Select(x => x.Group)
                            .OrderBy(y => y.Name)
                            .ToList(); } }
然后在集团的姐姐回归用户。

这可能看起来很复杂,但很酷的是单个主人。因此,当您修改UserGroup的HashSet时,它会反映在用户和组