アプリケーション用に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パッケージをインストールしましたが、2つのプロジェクトの違いは、データベースに使用したデータソースとPOCOクラスだけです。
ありがとう。
編集私のプログラムは現在_Console application
_を参照する_.Net Framework Class Library
_で構成されています。 _Console application
_ simpleには、次のようなコンストラクターがあります。
_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
is not in current contextになりました。参照がありませんか?
これは、追加の依存関係を避けようとしてMicrosoft.EntityFrameworkCore.Sqlite.Core
パッケージを使用したときに起こりました。
代わりにSQLitePCLRaw
パッケージに依存するMicrosoft.EntityFrameworkCore.Sqlite
パッケージをインストールして使用する必要があります。
何らかの理由でNuget Package
が必要な参照をインストールしていなかったため、パッケージを再インストールし、問題を修正しました!
SQLitePCL.raw*
参照がありません。
この非常に正確なエラーがありました。パッケージMicrosoft.Data.Sqlite.Core
(2.2.4)がインストールされていましたが、SQLitePCLRaw.bundle_winsqlite3
はインストールされていませんでした。
パッケージSQLitePCLRaw.bundle_winsqlite3
(1.1.13)をインストールすると、問題が解決しました。
Nuget Package
Microsoft.Data.Sqlite
をインストールします(Microsoft.Data.Sqlite.Core
ではありません)。 (私のバージョンは2.2.2です)
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());を使用します
connection = new SqliteConnection("Data Source = Sample.db");
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3());
connection.Open();
ただし、nuget package
の代わりにSystem.Data.SQLite
Microsoft.Data.Sqlite
を使用することをお勧めします