[英]Many-to-Many Relationships to Same Table with EF
我有一張桌子,在這里我需要很多對很多的關系,例如可以建立一個保持友誼的社交網絡。 例如:
public class User
{
public int UserId { get; set; }
public string UserName { get; set; }
}
對應表
CREATE TABLE Users (
UserId int,
UserName varchar(255)
);
我需要一個像這樣的表:
CREATE TABLE Friendships(
UserId1 int,
UserId2 int
);
其中兩個字段都與Users.UserId
相關。 如何在EF中使用注釋實現此目的?
這樣的事情會做到的
public class User
{
public int UserId { get; set; }
public string UserName { get; set; }
public ICollection<User> FriendShips { get; set; }
public User()
{
FriendShips = new HashSet<User>();
}
}
public class SocialContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>()
.HasMany(p => p.FriendShips)
.WithMany()
.Map(mc =>
{
mc.ToTable("userfriends");
});
}
}
每個用戶的單個列表將保留每個用戶的朋友列表
測試:
using (SocialContext ctx = new SocialContext())
{
User u = new User()
{
UserName = "John"
};
User uu = new User()
{
UserName = "Jack"
};
uu.FriendShips.Add(u);
u.FriendShips.Add(uu);
ctx.Users.Add(u);
ctx.SaveChanges();
}
試試這個解決方案
public class User
{
public int UserId { get; set; }
public string UserName { get; set; }
public virtual ICollection<User> MyFriends { get; set; }
public virtual ICollection<User> IFriendsForUsers { get; set; }
}
在類EFDBContext中:DbContext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().HasMany(t => t.Friends )
.WithMany(t => t.IFriendsForUsers )
.Map(c => { c.ToTable("UserFriends");
c.MapLeftKey("UserId"); c.MapRightKey("UserFriendId"); });
base.OnModelCreating(modelBuilder);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.