Не правильно заполняется таблица в бд

183
15 октября 2021, 00:10

Дела обстоят так: дошел до момента добавления друзей в своей Соц сети, решил использовать многие ко многим (many to many from asp.net core), создал необходимую сущность и прописал логику в контексте, создал таблицу в бд,в таблице 2 ячейки, ячейка userid и freindis, прохожусь точкой останова, все идет как положено, все данные получаю и записываю как надо, однако по факту в обе ячейки ложится айдишник юзера и в первую и во вторую... Теперь код:

public class Friends
    {
        public int UserId { get; set; }
        public int FriendId { get; set; }
        public User User { get; set; }

    }

создаю список у юзера:

public class User
    {
        public User()
        {
            UserFriends = new List<Friends>();
        }
        public int Id { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string LastName { get; set; }
        public List<Friends> UserFriends { get; set; }
    }

котекст дб:

public class DBUserContext : DbContext
    {
        public DbSet<User> Users { get; set; }
        public DBUserContext()
        {
            Database.EnsureCreated();
        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Friends>()
                .HasKey(t => new { t.UserId, t.FriendId });
            modelBuilder.Entity<Friends>()
                .HasOne(sc => sc.User)
                .WithMany(s => s.UserFriends)
                .HasForeignKey(sc => sc.UserId);
            modelBuilder.Entity<Friends>()
                .HasOne(sc => sc.User)
                .WithMany(c => c.UserFriends)
                .HasForeignKey(sc => sc.FriendId);
        }

метод который собственно все и делает:

[HttpGet("[action]/{id}"), Route("getfriend")]
        public IActionResult GetFriend(int id)
        {
            User user = db.Users.FirstOrDefault(x => x.Id == id);
            User thisus = db.Users.FirstOrDefault(x => x.UserName == User.Identity.Name);
            thisus.UserFriends.Add(new Friends { UserId = thisus.Id, FriendId = user.Id });
            db.Update(thisus);
            db.SaveChanges();
            return Ok(user);
        }

ну и результат: UserId 4 FriendId 4 хотя френд должен быть 2...

Answer 1

Рано забил тревогу пардонте, немного неправильно записал в контекст, было так:

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Friends>()
                .HasKey(t => new { t.UserId, t.FriendId });
            modelBuilder.Entity<Friends>()
                .HasOne(sc => sc.User)
                .WithMany(s => s.UserFriends)
                .HasForeignKey(sc => sc.UserId);
            modelBuilder.Entity<Friends>()
                .HasOne(sc => sc.User)
                .WithMany(c => c.UserFriends)
                .HasForeignKey(sc => sc.FriendId);
        }

стало так:

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
        modelBuilder.Entity<Friends>()
            .HasKey(t => new { t.UserId, t.FriendId });
        modelBuilder.Entity<Friends>()
            .HasOne(sc => sc.User)
            .WithMany(s => s.UserFriends)
            .HasForeignKey(sc => sc.FriendId);
        modelBuilder.Entity<Friends>()
            .HasOne(sc => sc.User)
            .WithMany(c => c.UserFriends)
            .HasForeignKey(sc => sc.UserId);
    }

и все стало ок, решил не удалять вопрос, мб кому будет полезным, но если админ настоит то удалю без проблем:)

READ ALSO
Трансформация xsd средствами C#

Трансформация xsd средствами C#

Возможно ли используя C# преобразовать/трансформировать xsd файл к промежуточному виду? Под промежуточным видом имеется ввиду например удаление...

85
Запустить генерацию один раз для нескольких тестов NUnit

Запустить генерацию один раз для нескольких тестов NUnit

Подскажите пожалуйста, можно ли как-то объединить тесты, что бы несколько тестов запускали 1 метод и дожидались его выполненияСуть такая:...

297
Получить значение url из браузера

Получить значение url из браузера

После открытия браузера при помощи

141
Какая модель памяти в .NET Core?

Какая модель памяти в .NET Core?

В спецификации ECMA CLI определена слабая (weak) модель памятиЭто позволяет переупорядочивать последовательность выполнения команд (что полезно...

184