[英]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.