Я очень новичок в программировании на C #, читая серию видеоуроков с использованием Discord.net и sqlite, чтобы создать бота для моего сервера для добавления различных команд и автоматизации различных задач.
В учебнике все шло хорошо, пока я не достиг шестой части, https://www.youtube.com/watch?v=-Lf6w7WZvT0. Чуть позже 12:30 автор пытается использовать update-database
в консоли диспетчера пакетов для создания базы данных с именем * 1006. * в нестандартном месте. Однако попытка создать эту базу данных так, как он это написал, приводит к ошибке, SQLite Error 26: 'file is not a database'.
Решение автора учебника состоит в том, чтобы создать базу данных в расположении по умолчанию, вручную переместить ее в предпочтительное расположение, а затем отредактировать код для использования предпочтительного расположения. Мне это кажется нелегким, и я хотел бы выяснить, как заставить консоль диспетчера пакетов создавать программу в правильном месте.
Вот программа, как ее изначально написал автор учебника
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
namespace MyBot.Resources.Database
{
public class SqliteDbContext : DbContext
{
public DbSet<Stone> Stones { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder Options)
{
string DbLocation = string DbLocation = Assembly.GetEntryAssembly().Location.Replace(@"bin\Debug\netcoreapp2.1",
@"Data\Database.sqlite");
Options.UseSqlite("Data Source=" + DbLocation);
}
}
}
Это приводит к ошибке file is not a database
.
Затем он меняет это на
string DbLocation = string DbLocation = Assembly.GetEntryAssembly().Location.Replace(@"bin\Debug\netcoreapp2.1",
@"Data\Database.sqlite");
Options.UseSqlite("Data Source=Database.sqlite"_;
Это создает файл Database.sqlite
в каталоге MyBot
, который автор затем перемещает в каталог MyBot\Data
. Затем он меняет программу на
string DbLocation = string DbLocation = Assembly.GetEntryAssembly().Location.Replace(@"bin\Debug\netcoreapp2.1",
@"Data\");
Options.UseSqlite($"Data Source={DbLocation}Database.sqlite";
И оттуда программа работает как положено.
Я удалил файл Database.sqlite
и повторил код, как указано выше, чтобы увидеть, что происходит, и получил сообщение No migrations were applied. The database is already up to date.
Повторное выполнение различных шагов каждый раз приводит к одному и тому же результату.
Я попытался найти два сообщения об ошибках в Google и не нашел ничего полезного. Я также проверил страницу API для DbContextOptionsBuilder
на https://docs.microsoft.com/en-us/ef/core/api/microsoft.entityframeworkcore.dbcontextoptionsbuilder и не смог найти ничего, что указывало бы, почему это не работает.
Любая помощь в получении файла Database.sqlite
для записи в MyBot\Data
будет очень признательна.