Дела обстоят так: дошел до момента добавления друзей в своей Соц сети, решил использовать многие ко многим (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...
Рано забил тревогу пардонте, немного неправильно записал в контекст, было так:
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);
}
и все стало ок, решил не удалять вопрос, мб кому будет полезным, но если админ настоит то удалю без проблем:)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Возможно ли используя C# преобразовать/трансформировать xsd файл к промежуточному виду? Под промежуточным видом имеется ввиду например удаление...
Подскажите пожалуйста, можно ли как-то объединить тесты, что бы несколько тестов запускали 1 метод и дожидались его выполненияСуть такая:...
В спецификации ECMA CLI определена слабая (weak) модель памятиЭто позволяет переупорядочивать последовательность выполнения команд (что полезно...