我试图为我的应用程序创建一个SQLite数据库,并遇到此错误。



我创建了一个简单的控制台应用程序,可以运行完全相同的代码进行创建,没有任何问题。代码看起来像这样!

using (var dataContext = new SampleDBContext())
{
    dataContext.Accounts.Add(new Account() { AccountName = name, AccountBalance = balance });
}


public class SampleDBContext : DbContext
{
    private static bool _created = false;
    public SampleDBContext()
    {
        if (!_created)
        {
            _created = true;
            Database.EnsureDeleted();
            Database.EnsureCreated();
        }
    }
    protected override void OnConfiguring(DbContextOptionsBuilder optionbuilder)
    {
        optionbuilder.UseSqlite(@"Data Source="Source folder"\Database.db");
    }

    public DbSet<Account> Accounts { get; set; }
}

任何人都可以阐明这个问题吗?我在两个项目上都安装了相同的Nuget软件包,两者之间的唯一区别是用于数据库的数据源和POCO类。

谢谢。

编辑
我的程序当前由引用Console application.Net Framework Class Library组成。 Console application简单的构造函数如下所示:
public Program()
{
    using (var db = new FinancialContext())
    {
        db.Accounts.Add(new Account() { AccountName = "RBS", AccountBalance=20 });
    }
}

类库的FinancialContext如下:
public class FinancialContext : DbContext
{
    public DbSet<Account> Accounts { get; set; }

    public FinancialContext()
    {
      # Database.EnsureDeleted();
        Database.EnsureCreated();
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionbuilder)
    {
        optionbuilder.UseSqlite(@"Data Source="Some Source Folder"\Database.db");
    }
}

上述错误显示在#符号点处,我的编码方式是否存在问题?我真的很想知道问题是什么,所以我可以正确地解决它,而不是应用“修复”。我也尝试了注释中的建议,但是将代码行SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());放在Console Application中给出了错误SQLitePCL不在当前上下文中,这让我觉得我缺少引用了吗?

最佳答案

当我尝试避免任何其他依赖关系并选择Microsoft.EntityFrameworkCore.Sqlite.Core包时,这发生在我身上。

您应该改为安装并使用Microsoft.EntityFrameworkCore.Sqlite软件包,该软件包依赖于SQLitePCLRaw软件包。

关于c# - 如何调用SQLitePCL.Batteries.Init()。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50746465/

10-13 03:16