C#
Пользователи и группы

Пользователи и группы

Пример программы с сохранением пользователей и групп пользователей в БД sqlite с использованием Entity Framework (EF).

using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using System.Linq;

namespace SQLiteEFUserExample
{
    public class User
    {
        public int Id { get; set; }
        public string Username { get; set; }
        public string Email { get; set; }
        public List<Group> Groups { get; set; }
    }

    public class Group
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<User> Users { get; set; }
    }

    public class UserDbContext : DbContext
    {
        public DbSet<User> Users { get; set; }
        public DbSet<Group> Groups { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder options)
            => options.UseSqlite("Data Source=users.db");

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<User>().ToTable("User");
            modelBuilder.Entity<Group>().ToTable("Group");

            modelBuilder.Entity<User>()
                .HasMany(u => u.Groups)
                .WithMany(g => g.Users)
                .UsingEntity(j => j.ToTable("UserGroup"));
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new UserDbContext())
            {
                context.Database.EnsureCreated();

                // Добавляем пользователей
                var newUser1 = new User { Username = "user1", Email = "user1@example.com" };
                var newUser2 = new User { Username = "user2", Email = "user2@example.com" };
                context.Users.Add(newUser1);
                context.Users.Add(newUser2);
                context.SaveChanges();

                // Добавляем группы
                var newGroup1 = new Group { Name = "Group 1", Users = new List<User> { newUser1 } };
                var newGroup2 = new Group { Name = "Group 2", Users = new List<User> { newUser1, newUser2 } };
                context.Groups.Add(newGroup1);
                context.Groups.Add(newGroup2);
                context.SaveChanges();

                // Читаем и выводим пользователей с группами
                var users = context.Users.Include(u => u.Groups).ToList();
                foreach (var user in users)
                {
                    Console.WriteLine($"Id: {user.Id}, Username: {user.Username}, Email: {user.Email}");

                    foreach (var group in user.Groups)
                    {
                        Console.WriteLine($"  Group: {group.Name}");
                    }
                }
            }
        }
    }
}

В этом примере мы создали класс User, который представляет собой модель пользователя с полями Id, Username, Email и списком List<Group> Groups который содержит список групп в которых состоит пользователь. Затем мы создали контекст базы данных UserDbContext, который наследуется от DbContext и добавили набор DbSet<User> Users для работы с пользователями. В методе Main мы создаем двух пользователей, добавляем их в таблицу и выводим пользователей из базы данных.

А так же добавлена сущность Group с полями Id, Name и свойством List<User> Users, которое содержит список пользователей, состоящих в данной группе. Связь между пользователями и группами организована через таблицу UserGroup, которая будет хранить связи между пользователями и группами.

Метод OnModelCreating в классе UserDbContext настраивает связи между пользователями и группами с помощью HasMany и WithMany методов, а также использует UsingEntity для настройки таблицы UserGroup.

В методе Main добавлены две группы, и каждому пользователю назначены соответствующие группы. Затем, при чтении и выводе пользователей, также выводятся группы, к которым они принадлежат.