在ASP.NET Core 3.1中使用仓储模式实现多对多关系,可以按照以下步骤进行操作:
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions options)
: base(options)
{
}
public DbSet Users { get; set; }
public DbSet Roles { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasKey(ur => new { ur.UserId, ur.RoleId });
modelBuilder.Entity()
.HasOne(ur => ur.User)
.WithMany(u => u.UserRoles)
.HasForeignKey(ur => ur.UserId);
modelBuilder.Entity()
.HasOne(ur => ur.Role)
.WithMany(r => r.UserRoles)
.HasForeignKey(ur => ur.RoleId);
}
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection UserRoles { get; set; }
}
public class Role
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection UserRoles { get; set; }
}
public class UserRole
{
public int UserId { get; set; }
public User User { get; set; }
public int RoleId { get; set; }
public Role Role { get; set; }
}
public interface IUserRepository
{
Task AddUser(User user);
Task> GetAllUsers();
Task GetUserById(int id);
}
public class UserRepository : IUserRepository
{
private readonly ApplicationDbContext _context;
public UserRepository(ApplicationDbContext context)
{
_context = context;
}
public async Task AddUser(User user)
{
await _context.Users.AddAsync(user);
await _context.SaveChangesAsync();
}
public async Task> GetAllUsers()
{
return await _context.Users.Include(u => u.UserRoles).ThenInclude(ur => ur.Role).ToListAsync();
}
public async Task GetUserById(int id)
{
return await _context.Users
.Include(u => u.UserRoles)
.ThenInclude(ur => ur.Role)
.FirstOrDefaultAsync(u => u.Id == id);
}
}
在Startup.cs文件的ConfigureServices方法中,注册仓储服务:
services.AddScoped();
现在,你可以在需要使用多对多关系的地方注入IUserRepository
来对用户和角色进行操作了。
public class UserController : Controller
{
private readonly IUserRepository _userRepository;
public UserController(IUserRepository userRepository)
{
_userRepository = userRepository;
}
public async Task Index()
{
var users = await _userRepository.GetAllUsers();
return View(users);
}
// 其他操作方法...
}
以上就是在ASP.NET Core 3.1中使用仓储模式实现多对多关系的解决方法,通过仓储模式可以方便地进行数据访问和管理。