2012-10-16 49 views
0

我正在處理一個我自己無法解決的問題。我也試圖在網上找到一個解決方案,但沒有成功。ADO.net - 複雜的數據綁定

這裏的細節...

其對複雜數據綁定(在這種情況下,3個數據庫表)。

這裏的表,我有(抽象),試圖

我一直在試圖modelate一個用戶/組關聯

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

第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的組和用戶。
它只是一個對象的引用,所以每個人都引用相同的數據。
爲了效率和等於重寫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時,它將反映在用戶和組