0

自分では解決できない問題に取り組んでいます。また、ネットで解決策を見つけようとしましたが、成功しませんでした。

ここで詳細...

その複雑なデータ バインディング (この場合、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

このようにして、1 人のユーザーを複数のグループに所属させることができます (逆も同様です)。

私は、マスター グリッドが tblUsers のユーザーを表示する必要があるマスター - 詳細の種類のような WinForm を作成しようとしてきました...そこで選択した内容に応じて、選択したユーザーが属するグループを詳細グリッドに表示しますに ... しかし、tblGroups の情報を使用する

誰かがこの問題について手を貸してくれませんか?

4

1 に答える 1

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 の両方に渡します。
これは単なるオブジェクトへの参照であるため、全員が同じデータを参照しています。
効率性と Equals のために 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 を修正すると、User と Group の両方に反映されます。

于 2012-10-16T18:02:22.307 に答える