Windows 10 个通用应用 SQLite

Windows 10 Universal App SQLite

我目前正在尝试将工作中的 Windows 8 JavaScript 应用程序移植到 Windows 10 UAP 应用程序。在我的 Windows 8 应用程序中,我大量使用了这个 SQLite 包装器和库:https://github.com/doo/SQLite3-WinRT。但是,在按照存储库自述文件中的设置说明将 SQLite3-WinRT 添加到我的 Windows 10 UAP 应用程序后,我收到来自我的 SQLite3.js 源文件的 "WinJS is not defined" 错误添加到应用程序中我的 /js 目录(它在 windows 8 应用程序中工作正常的方式)。我在这里做错了什么,或者这个 SQLite3-WinRT 不能与 Win 10 UAP 一起工作,有没有更好的方法在 JavaScript Windows 10 UAP 应用程序中使用 SQLite?非常感谢!

我尝试在 Windows 10 上使用 https://github.com/doo/SQLite3-WinRT,发现 VS2015 Community Edition 甚至无法加载项目。每次我尝试加载它时,VS 都会挂起并在状态栏中显示 "unloading project"。通过任务管理器杀死它是唯一的出路。

我发现 this sample app 在通用应用程序中实现了 SQLite。这对我来说在 Windows 10 上编译和运行良好,尽管我确实必须使用我拥有的版本 SQLite 3.8.11.1

更新对 SQLite 3.8.4.3 的引用
  1. 下载并解压Universal JavaScript SQLite Sample
  2. 在 Visual Studio
  3. 中打开
  4. 点击"Shared App"项目组
  5. 展开"SQLite.Windows" > "References"
  6. 删除对“SQLite.WinRT81,版本=3.8.4.3
  7. 的引用
  8. 右击 > "Add Reference"
  9. 来自 Windows 8.1 > 扩展,select“用于 Windows 运行时的 SQLite (Windows 8.1)
  10. 展开"SQLite.WindowsPhone" > "References"
  11. 删除对“SQLite.WP81,版本=3.8.5
  12. 的引用
  13. 右击 > "Add Reference"
  14. 来自 Windows 8.1 > 扩展,select“用于 Windows 运行时的 SQLite (Windows 8.1)
  15. 编译

如果您正在寻找一步一步的过程,您可以看看这个 post

您可以将其用于:

  • Windows 10:用于通用应用程序平台的 SQLite
  • Windows Phone 8.1:用于 Windows Phone 8.1
  • 的 SQLite
  • Windows 8.1:用于 Windows 运行时的 SQLite (Windows 8.1)

设置包和扩展后,您可以使用以下方法创建数据库和模型类:

using System.IO;
using System.Threading.Tasks;
using SQLiteModernApp.DataModel;
using SQLite.Net.Async;
using System;
using SQLite.Net;
using SQLite.Net.Platform.WinRT;

namespace SQLiteModernApp.DataAccess
{
    public class DbConnection : IDbConnection
    {
        string dbPath;
        SQLiteAsyncConnection conn;

        public DbConnection()
        {
            dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "Sample.sqlite");

            var connectionFactory = new Func<SQLiteConnectionWithLock>(() => new SQLiteConnectionWithLock(new SQLitePlatformWinRT(), new SQLiteConnectionString(dbPath, storeDateTimeAsTicks: false)));
            conn = new SQLiteAsyncConnection(connectionFactory);
        }

        public async Task InitializeDatabase()
        {
            await conn.CreateTableAsync<Department>();
            await conn.CreateTableAsync<Employee>();
            await conn.CreateTableAsync<EmployeeDepartment>();
        }

        public SQLiteAsyncConnection GetAsyncConnection()
        {
            return conn;
        }
    }
}

现在您可以按照示例创建 CRUD:

using System.Collections.Generic;
using System.Threading.Tasks;
using SQLite.Net.Async;
using SQLiteModernApp.DataAccess;
using SQLiteModernApp.DataModel;
using SQLiteNetExtensionsAsync.Extensions;

namespace SQLiteModernApp.Repository
{
    public class EmployeeRepository : IEmployeeRepository
    {
        SQLiteAsyncConnection conn;

        public EmployeeRepository(IDbConnection oIDbConnection)
        {
            conn = oIDbConnection.GetAsyncConnection();
        }

        public async Task InsertEmployeeAsync(Employee employee)
        {
            await conn.InsertOrReplaceWithChildrenAsync(employee);
        }

        public async Task UpdateEmployeeAsync(Employee employee)
        {
            await conn.UpdateWithChildrenAsync(employee);
        }

        public async Task DeleteEmployeeAsync(Employee employee)
        {
            await conn.DeleteAsync(employee);
        }

        public async Task<List<Employee>> SelectAllEmployeesAsync()
        {
            return await conn.GetAllWithChildrenAsync<Employee>();
        }

        public async Task<List<Employee>> SelectEmployeesAsync(string query)
        {
            return await conn.QueryAsync<Employee>(query);
        }
    }
}