2011-05-06 98 views
0

我想首先使用EF代碼來創建一個數據庫,但我不知道如何定義以下關係的類,以便它是有效的。EF代碼第一ASP.NET C#設計

我們有一個用戶和用戶有朋友,這又是用戶的集合,所以我想以下POCO類

`//Class User 
public class User 
{ 
    public Guid UserId{get;set;} 
    public string UserName{get;set;} 
    public String UserAddress{get;set;} 
    // other user properties 
} 

//Class Friend 
public class Friend 
{ 
    public Guid FriendId{get;set;} //unique identifier for Friend Table 
    public virtual User CurrentUser{get;set;} 
    public List<User> lstUserFriends {get;set;} //contains list of all friends that the  user has 

}` 

這是否好看的性能代價或者你認爲你可以建議一個替代?

+3

它看起來有點怪我...什麼是朋友?什麼不會使「朋友」成爲用戶的財產? (自引用外鍵) – turtlepick 2011-05-06 01:56:57

回答

4

爲什麼不只是做

public class User 
{ 
    public Guid UserId{get;set;} 
    public string UserName{get;set;} 
    public String UserAddress{get;set;} 
    public IList<User> Friends{get;set;} 
    // other user properties 
} 
+0

這似乎只是在每個用戶之間創建一對一關係,因爲它在同一個表內的每個成員行上創建了Member MemberId列。 – 2011-05-06 04:31:11

3

你需要自我引用許多一對多的關係,因爲使用可以有很多朋友,但也可以是很多用戶的朋友。

public class User 
{ 
    public Guid UserId { get; set; } 
    public string UserName { get; set; } 
    public String UserAddress { get; set; } 

    [InverseProperty("Friends")] 
    public virtual ICollection<User> FriendWith { get; set; } 
    [InverseProperty("FriendWith")] 
    public virtual ICollection<User> Friends { get; set;} 
} 

也可以忽略InverseProperty數據標註和使用流利的映射:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<User>() 
       .HasMany(u => u.Friends) 
       .WithMany(f => f.FriendWith); 
    // I'm not sure but you can also need to add this: 
    //   .WillCascadeOnDelete(false); 
} 
+0

優秀的答案,你只是救了我幾個小時。 – croisharp 2012-07-19 20:02:29