“文件不是数据库”或“未应用任何迁移。数据库已经是最新的。在非默认路径中创建Database.sqlite时

时间:2019-01-25 03:50:40

标签: c# sqlite entity-framework-core discord.net

我是一位非常新手的C#程序员,遵循一系列使用Discord.net和sqlite的视频教程,为服务器创建一个机器人以添加各种命令并自动执行各种任务。

在本教程中,一切都进展顺利,直到我达到了第六期https://www.youtube.com/watch?v=-Lf6w7WZvT0。 12:30之后,作者尝试在Package Manager控制台中使用update-database在非默认位置创建一个名为Database.sqlite的数据库。但是,尝试以他编写数据库的方式创建该数据库会导致错误SQLite Error 26: 'file is not a database'.

教程作者的解决方案是在默认位置创建数据库,手动将其移动到首选位置,然后编辑代码以使用首选位置。对我来说,这似乎不太优雅,我想弄清楚如何使Package Manager Console在正确的位置创建程序。

这是教程作者最初编写的程序

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搜索这两个错误消息,但没有发现任何有用的信息。我还在https://docs.microsoft.com/en-us/ef/core/api/microsoft.entityframeworkcore.dbcontextoptionsbuilder的api页面上检查了DbContextOptionsBuilder,找不到任何表明其无法正常工作的信息。

任何帮助您将Database.sqlite文件写入MyBot\Data的帮助。

0 个答案:

没有答案