Пользователи и группы
Пример программы с сохранением пользователей и групп пользователей в БД 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
добавлены две группы, и каждому пользователю назначены соответствующие группы. Затем, при чтении и выводе пользователей, также выводятся группы, к которым они принадлежат.