В настоящее время я работаю над API отдыха в ядре dotnet с базой данных Mysql.На данный момент у меня есть две таблицы с пользователями и ролями.Для моего проекта мне нужно получить пользователя и роль.В моем коде я уточнил отношения, как указано в этом примере
public DbSet<User> Users { get; set; }
private void InitEntityRole(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Role>(entity =>
{
entity.Property(e => e.Id).ValueGeneratedOnAdd().HasColumnName("Id");
entity.Property(e => e.Name).HasColumnName("naam");
});
}
private void InitEntityUser(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>(entity =>
{
entity.Property(e => e.Id).ValueGeneratedOnAdd().HasColumnName("Id");
entity.Property(e => e.Username).HasColumnName("gebruikersnaam");
entity.Property(e => e.PasswordHash).HasColumnName("wachtwoord");
entity.Property(e => e.PasswordSalt).HasColumnName("salt");
entity.HasOne(u => u.Person)
.WithOne(p => p.User)
.HasForeignKey<Person>(p => p.Id)
.HasConstraintName("fk_persoon");
entity.HasOne(u => u.Role)
.WithMany(r => r.Users)
.HasForeignKey(r => r.Id)
.HasConstraintName("fk_gebruikerrol");
});
}
В моем коде у меня есть тестовая функция для получения всех пользователей, подобных этому
public List<User> GetAll()
{
var users = _dbContext.Users.Include(u => u.Role).ToList();
users.ForEach(u => u.Password = null);
return users;
}
Моя модель:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace DamstraChallengeBackend.Models
{
[Table("rol")]
public class Role
{
public int Id { get; set; }
public string Name { get; set; }
[JsonIgnore]
public ICollection<User> Users { get; set; }
}
}
и:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace DamstraChallengeBackend.Models
{
[Table("gebruiker")]
public class User
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Username { get; set; }
[NotMapped]
public string Password { get; set; }
[JsonIgnore]
public byte[] PasswordHash { get; set; }
[JsonIgnore]
public byte[] PasswordSalt { get; set; }
public Person Person { get; set; }
public Role Role { get; set; }
[NotMapped]
[JsonIgnore]
public string Token { get; set; }
}
}
Мои таблицы настроены задницей, а затем
Пользователь:
CREATE TABLE `gebruiker` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`gebruikersnaam` varchar(255) NOT NULL,
`wachtwoord` blob NOT NULL,
`salt` blob NOT NULL,
`p_id` int(11) NOT NULL,
`r_id` int(11) NOT NULL,
PRIMARY KEY (`Id`),
KEY `fk_persoon` (`p_id`),
KEY `fk_gebruikerrol` (`r_id`),
CONSTRAINT `fk_gebruikerrol` FOREIGN KEY (`r_id`) REFERENCES `rol` (`Id`),
CONSTRAINT `fk_persoon` FOREIGN KEY (`p_id`) REFERENCES `persoon` (`Id`)
)
ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_0900_ai_ci
Роль:
CREATE TABLE `rol` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`naam` varchar(255) NOT NULL,
PRIMARY KEY (`Id`)
)
ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_0900_ai_ci
Когда я выполняю этот код, все, что я получаю, это пустой массив.Я думаю, что я сделал ошибку в конфигурации, но я не могу ее найти.Пожалуйста, кто-нибудь может мне помочь.
То, что я попробовал, таково: оставив включение, а затем я получу массив с пользователями без этих ролей.Но как только я добавляю оператор включения, ничего не появляется.
Мне кажется любопытным то, что он работал, когда у меня был один пользователь в группе.Как только я добавляю больше, я получаю пустой массив.
Я прошу прощения за ошибки в моем английском, но я надеюсь, что это достаточно ясно.