Сущности сохраняются после успешного выполнения программы
я попробовал сделать бота для телеграмма. Для хранения данных участников группы я использую EntityFrameworkCore.Sqlite
И когда я закончил писать тестовое сохранение (для проверки работоспособности с базой данных), я заметил что данные не сохраняются (это было видно по дате изменения, файл базы данных не изменялся) + используя SQLite обозреватель, база данных была пуста. Но позапускав ещё немного раз, я заметил, что если завершить работу программы с кодом 0, то сохранение пройдёт. Иначе - не сохранит. У меня вопрос, как сделать так, чтобы он сохранял во время программы, а не после её завершения? Заранее спасибо.
Код:
if (message.Text!.StartsWith("/testik"))
{
using (ApplicationContext db = new ApplicationContext())
{
await db.Members.AddAsync(new Member { TelegramId = message.From!.Id }, cts);
await db.SaveChangesAsync(cts);
// Несмотря на то, что через небольшое время "SAVED" выводится на консоль, база данных сохранит сущность только после завершения программы. :<
Console.WriteLine("SAVED");
}
}
Контекст базы данных:
internal class ApplicationContext : DbContext
{
public DbSet<Member> Members { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite(Configuration.GetConnectionString("Default"));
}
}
Сущность:
internal class Member
{
public int Id { get; set; }
public long TelegramId { get; set; }
public long CurrentLevel { get; set; }
public long CurrentExperience { get; set; }
}
Статичный класс с конфигурацией от appsettings.json:
internal static class Configuration
{
private static readonly IConfigurationRoot ConfigurationRoot = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
internal static string Token = ConfigurationRoot["Token"]!;
internal static string? GetConnectionString(string name)
{
return ConfigurationRoot.GetConnectionString(name);
}
}
appsettings.json:
{
"Token": "Тут мой токен",
"ConnectionStrings": {
"Default": "Data Source=A:\\Database\\awoxykbot.db"
}
}
Ответы (1 шт):
Ребят, вопрос решён.
Во время запуска программы, используя Entity Framework Core, он не добавляет напрямую в базу данных, а добавляет в кеш-файлы, которые находятся в том же каталоге, что и сам файл базы данных. Вот что получилось в телеграмме:
я: /mystat
бот: такого пользователя нет
я: /testik
бот: Вы успешно добавлены в базу данных!
я: /testik
бот: Данный пользователь уже в базе данных.
я: /mystat
бот: *мой телеграмм айди*