2012-11-23 33 views
0

我在MVC應用兩個實體:MVC編碼第一建模多重關係 - 簡單的例子

public class User 
{ 
    public int ID {get; set;} 
    public string Forename {get; set;} 
    public string Surname {get;set;} 
} 

public class SubGroup 
{ 
    public int ID {get;set;} 
    public string Name {get;set;} 
} 

,我想使用的代碼先創建它們之間的關係。關係是每個用戶可以是0個或更多子組的成員。

請有人建議最好的方法來做到這一點,因爲我看過幾個例子,所以我很困惑。我見過有關在一個類中實現ICollections的東西,以及其他有關使用流暢API的內容。

回答

1

ICollections方法: UPDATE:

如果我理解正確的話,你有很多一對多關係(組有許多用戶,用戶都可以在許多羣體),在這種情況下,代碼應該是這樣的:

 public class RelationExampleContext : DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<SubGroup> SubGroups { get; set; } 

} 


public class User 
{ 
    [Key] 
    public int ID { get; set; } 
    public string Forename { get; set; } 
    public string Surname { get; set; } 

    public ICollection<SubGroup> SubGroups { get; set; } 
} 

public class SubGroup 
{ 
    [Key] 
    public int ID { get; set; } 
    public string Name { get; set; } 

    public ICollection<User> Users { get; set; } 
} 

將用戶添加到組例如:

var db = new RelationExampleContext(); 

var subGroups = new List<SubGroup> 
           { 
            new SubGroup() {Name = "Subgroup1"}, 
            new SubGroup() {Name = "Subgroup2"} 
           }; 

      var users = new List<User> 
          { 
           new User() 
            { 
             Forename = "Forename1", 
             Surname = "Surname1", 
             SubGroups = new List<SubGroup> 
                 { 
                  subGroups.First(), 
                  subGroups.Last() 
                 } 
            }, 
           new User() 
            { 
             Forename = "Forename2", 
             Surname = "Surname2", 
             SubGroups = new List<SubGroup> 
                 { 
                  subGroups.First() 
                 } 
            } 
          }; 

      foreach (var subGroup in subGroups) 
      { 
       db.SubGroups.Add(subGroup); 
      } 

      foreach (var user in users) 
      { 
       db.Users.Add(user); 
      } 

      db.SaveChanges(); 
+0

這是一個偉大的答覆想法,正是我一直在尋找 - 謝謝!在Visual Studio 2010中需要做什麼來查看像上面發佈的關係圖? – markp3rry

+0

要顯示圖表,您應該生成edmx模型。但是如果您選擇CodeFirst方法,edmx模型不需要。 edmx模型經常與DataBase第一種方法或Model首先使用。但是,如果您仍然想要添加edmx模型,可以在菜單中對其進行修改:添加>新建項目> ADO.NET實體數據模型>從數據庫生成。 – testCoder

+0

我在ContextInitializer中播種了一些數據。我創建了兩個新用戶並將其添加到上下文中。然後我創建了兩個新的SubGroups,併爲每個添加了一個新的List ()。第一個用戶是組1和組2的成員,第二個是組1的成員。但是,當我執行查詢時,它僅顯示組1的SubGroupID。我究竟做錯了什麼? – markp3rry

1

我想用戶和子組在數據庫中的同一表 你需要創建該表之間的關係表(字段USER_ID,GROUP_ID) 模型對於像羣組

,然後你可以創建在用戶類組成新的實體

+0

好了,創建另一個表。 「在用戶級別創建組合」是什麼意思? – markp3rry

+0

我還以爲你問格局複合http://en.wikipedia.org/wiki/Composite_pattern 我的意思是這樣 'code' 公共類UserGrops { 公共__construct(用戶ID){} 公共職能getGrops(){...} ...} 公共類用戶{ //新屬性userGrops //添加方法 公共函數grops一起() { this.userGroups =新userGrops(此。 ID) } } 您可以使用建築 user.grops.getGrops() 'code' 我希望你明白我在使用其他編程語言 – san4o