Вы можете попробовать это следующим образом:
public class User
{
public int Id { get; set; }
public ICollection<FriendRequest> FriendRequests { get; set; }
}
public class FriendRequest
{
public int UserId { get; set; }
public int FriendId { get; set; }
public DateTime RequestDate { get; set; }
public User User { get; set; }
public User Friend { get; set; }
}
Отображение с помощью Fluent API:
modelBuilder.Entity<User>()
.HasMany(u => u.FriendRequests)
.WithRequired(f => f.User)
.HasForeignKey(f => f.UserId);
modelBuilder.Entity<FriendRequest>()
.HasKey(f => new { f.UserId, f.FriendId });
modelBuilder.Entity<FriendRequest>()
.HasRequired(f => f.Friend)
.WithMany()
.HasForeignKey(f => f.FriendId);
Из-за свойства RequestDate
в таблице ссылок вы не можете отобразить это какотношения многие ко многим.Вместо этого вам нужны два отношения «один ко многим», как показано выше.
Возможно, вам нужно отключить каскадное удаление, я не уверен.Вы можете сделать это, добавив .WillCascadeOnDelete(false)
в конце двух отображений «один ко многим».
Изменить
К вашему комментарию: Если вы удалите *В столбце 1017 * вы можете создать свою модель с отношением «многие ко многим».В этом случае вам не нужен объект FriendRequest
:
public class User
{
public int Id { get; set; }
public ICollection<User> FriendRequests { get; set; }
}
Отображение с помощью Fluent API:
modelBuilder.Entity<User>()
.HasMany(u => u.FriendRequests)
.WithMany()
.Map(m =>
{
m.ToTable("FriendRequests");
m.MapLeftKey("UserId");
m.MapRightKey("FriendId");
});