Как мне вызвать SQLitePCL.Batteries.Init ().? - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь создать базу данных 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 LibraryConsole 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");
    }
}

Ошибка Above отображается в точке символа #, есть проблема с тем, как я кодирую?Мне бы очень хотелось знать, в чем проблема, чтобы я мог исправить ее, а не применять «исправление».Также я попробовал предложение в комментариях, но помещение строки кода SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3()); в Console Application дало ошибку SQLitePCL не в текущем контексте, что заставляет меня думать, что я пропускаю ссылку?

Ответы [ 4 ]

0 голосов
/ 02 мая 2019

У меня была эта очень точная ошибка.Оказалось, что у меня установлен пакет Microsoft.Data.Sqlite.Core (2.2.4), но не SQLitePCLRaw.bundle_winsqlite3.

Установка пакета SQLitePCLRaw.bundle_winsqlite3 (1.1.13) решила проблему.

0 голосов
/ 28 июля 2018

Это случилось со мной, когда я попытался избежать каких-либо дополнительных зависимостей и пошел для пакета Microsoft.EntityFrameworkCore.Sqlite.Core.

Вместо этого следует установить и использовать пакет Microsoft.EntityFrameworkCore.Sqlite, который зависит от SQLitePCLRaw пакет.

0 голосов
/ 06 марта 2019

Установить Nuget Package Microsoft.Data.Sqlite (не Microsoft.Data.Sqlite.Core).(моя версия 2.2.2)

и использовать SQLitePCL.raw.SetProvider (новый 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

0 голосов
/ 08 июня 2018

По какой-то причине Nuget Package не установил необходимые ссылки, переустановил пакет и исправил проблему!

Отсутствуют ссылки SQLitePCL.raw*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...