Я строю социальную сеть с функцией Friend. Моя идея заключается в том, что я уже был класс по ApplicationUser по умолчанию, поэтому я создаю новую таблицу под названием ДругEntity Framework code-first, отношения Many-to-Many в одной таблице
public class Friend
{
[Key]
[Column(Order = 1)]
public string SenderId { get; set; }
[Key]
[Column(Order = 2)]
public string ReceiverId { get; set; }
//Status == true : Friend request accepted
//Status == false : Friend request not accepted
public bool Status { get; set; }
}
В ApplicationUser, я определяю 2 навигационные свойства Отправители и ресиверы (связать друг таблицу)
public class ApplicationUser : IdentityUser
{
[Required]
[StringLength(50)]
public string Name { get; set; }
[Required]
public bool Gender { get; set; }
[StringLength(255)]
public string Address { get; set; }
[StringLength(255)]
public string Job { get; set; }
[StringLength(255)]
public string Image { get; set; }
public DateTime Birthday { get; set; }
public ICollection<ApplicationUser> Senders { get; set; }
public ICollection<ApplicationUser> Receivers { get; set; }
}
И, наконец, в ApplicationDbContext, я объявляю отношение между 2 таблицами с использованием топочного нт Api
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<Friend> Friends { get; set; }
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ApplicationUser>()
.HasMany(a => a.Senders)
.WithMany(a => a.Receivers)
.Map(m =>
{
m.MapLeftKey("ReceiverId");
m.MapRightKey("SenderId");
m.ToTable("Friends");
});
base.OnModelCreating(modelBuilder);
}
}
Но когда я добавляю миграцию, это создает 2 таблицы, как это, и ни один из них является то, что мне нужно (один не имеет внешних ключей, один не имеет свойства состояния)
public override void Up()
{
CreateTable(
"dbo.Friends1",
c => new
{
SenderId = c.String(nullable: false, maxLength: 128),
ReceiverId = c.String(nullable: false, maxLength: 128),
Status = c.Boolean(nullable: false),
})
.PrimaryKey(t => new { t.SenderId, t.ReceiverId });
CreateTable(
"dbo.Friends",
c => new
{
SenderId = c.String(nullable: false, maxLength: 128),
ReceiverId = c.String(nullable: false, maxLength: 128),
})
.PrimaryKey(t => new { t.SenderId, t.ReceiverId })
.ForeignKey("dbo.AspNetUsers", t => t.SenderId)
.ForeignKey("dbo.AspNetUsers", t => t.ReceiverId)
.Index(t => t.SenderId)
.Index(t => t.ReceiverId);
}
Что я должен делать :(Я искал в Интернете, и это кажется законным, но он не работает
Вы только что спас мой день, спасибо !! – LaXuanLinh
Еще один вопрос, как я могу получить список друзей одного пользователя? – LaXuanLinh
Мне нужен список ApplicationUser, которые являются друзьями другого ApplicationUser. Поэтому я передаю его идентификатор и запрос, как указано ниже: – LaXuanLinh