#c# #postgresql #asp.net-core
Вопрос:
У меня есть сущность Пользователя, в которой я создал двух общих подписчиков ICollection и аналогичного одного из Подписчиков. Когда я создаю IdentityDbContext, я называл только табличные сущности Пользователей, Лайков, Сообщений, Комментариев. И напишите эту часть кода.
protected void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany(x => x.Followers).WithMany(x => x.Following)
.Map(x => x.ToTable("Followers")
.MapLeftKey("UserId")
.MapRightKey("FollowerId"));
modelBuilder.Entity<User>()
.HasMany(x => x.Following).WithMany(x => x.Followers)
.Map(x => x.ToTable("Following")
.MapLeftKey("UserId")
.MapRightKey("FollowingId"));
}
В контроллере я могу добавлять подписчиков к Пользователю, но не могу отменить подписку. У меня есть некоторые проблемы, чтобы найти, где в базе данных добавлять подписчиков и следующих пользователей. В миграциях я вижу, что есть таблица «Пользователь». И в этой таблице построены отношения между последователями и последователями.
migrationBuilder.CreateTable(
name: "UserUser",
columns: table => new
{
FollowersId = table.Column<string>(type: "text", nullable: false),
FollowingId = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_UserUser", x => new { x.FollowersId, x.FollowingId });
table.ForeignKey(
name: "FK_UserUser_AspNetUsers_FollowersId",
column: x => x.FollowersId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_UserUser_AspNetUsers_FollowingId",
column: x => x.FollowingId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
а вот мой код контроллера для добавления подписчика.
public IActionResult Follow(string userId)
{
var user = _db.ContextUser.FirstOrDefault(x => x.Id == userId);
var currentUser = CurrentUser().Resu<
if (currentUser.Following == null)
{
currentUser.Following = new Collection<User>();
}
if (user.Followers == null)
{
user.Followers = new Collection<User>();
}
user.Followers = _db.ContextUser
.Where(t =>
t.Following.Contains(user)).ToList();
currentUser.Following = _db.ContextUser
.Where(t =>
t.Followers.Contains(currentUser)).ToList();
if (user.Followers.Any(a => a == currentUser))
{
currentUser.Following.Remove(user);
user.Followers.Remove(currentUser);
_db.SaveChanges();
}
else
{
currentUser.Following.Add(user);
user.Followers.Add(currentUser);
}
_db.ContextUser.Update(user);
_db.ContextUser.Update(currentUser);
_db.SaveChanges();
return RedirectToAction("Personal", "Post", new { Id = userId });
}
Может ли кто-нибудь помочь мне подать заявку на эту таблицу или другими способами