如何调用 SQLitePCL.Batteries.Init().?

我正在尝试为我的应用程序创建一个 SQLite 数据库,但遇到了这个错误。


System.Exception: '您需要调用 SQLitePCL.raw.SetProvider()。如果您使用的是捆绑包,则可以通过调用 SQLitePCL.Batteries.Init() 来完成。


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


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不在当前上下文中,这让我认为我缺少参考?


四季花海
浏览 367回答 3
3回答

牧羊人nacy

当我试图避免任何额外的依赖项并选择Microsoft.EntityFrameworkCore.Sqlite.Core软件包时,这发生在我身上。您应该安装并使用该Microsoft.EntityFrameworkCore.Sqlite包,它依赖于该SQLitePCLRaw包。

绝地无双

安装Nuget Package Microsoft.Data.Sqlite(不是Microsoft.Data.Sqlite.Core)。(我的版本是2.2.2)并使用SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());&nbsp;connection = new SqliteConnection("Data Source = Sample.db");&nbsp;SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());&nbsp;connection.Open();但我建议nuget package System.Data.SQLite改用Microsoft.Data.Sqlite

慕桂英3389331

我有这个非常准确的错误。原来我Microsoft.Data.Sqlite.Core安装了包(2.2.4),但没有安装SQLitePCLRaw.bundle_winsqlite3.安装包SQLitePCLRaw.bundle_winsqlite3(1.1.13) 解决了这个问题。
打开App,查看更多内容
随时随地看视频慕课网APP