簡體   English   中英

使用EF到同一表的多對多關系

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM