0

我似乎无法摆脱 SQLite.Net-PCL 的死角;我有一个带有 PCL 项目、Droid 项目、iOS 项目和 Windows 通用项目的 Xamarin 表单解决方案。我已经为 SQLite.Net-PCL 和 SQLite.Net.Core-PCL 安装了 nuget 包。

所以,我去 github 项目寻找一些很棒的例子来开始,但它们都不起作用;显然你必须将一个平台传递给数据库连接,但我得到了一个关于它们的引用错误(例如 SQLitePlatformWin32)。

在网上搜索参考资料,然后……什么都没有。在平台上搜索 nuget,然后......什么也没有。

我错过了什么?(是的,我觉得很愚蠢)

他们的一个例子是

 public class Database : SQLiteConnection
{
    public Database(string path) : base(new SQLitePlatformWin32(), path)
    {
        CreateTable<Stock>();
        CreateTable<Valuation>();
    }}

并且我在“新 SQLitePlatformWin32”行上遇到无法解决的参考错误。

4

1 回答 1

1

对于其他苦苦挣扎的人,这是您需要做的。

  • 安装 SQLite.Net-PCL、SQLite.Net.Core-PCL 和 SQLite.Net.Async-PCL nugets
  • 在 PCL 中为 ISQLite 创建一个接口:

    public interface ISQLite { SQLiteConnection GetConnection(); }

  • 通过 DependencyService 调用 GetConnection

    PatientDatabase = DependencyService.Get<ISQLite>().GetConnection(); PatientDatabase.CreateTable<Patient>();

  • 以上将根据您的平台(即android、ios)创建连接。在每个平台的项目中,您必须有一个可通过 DependencyService 访问的 GetConnection,例如对于 Android

    [assembly: Xamarin.Forms.Dependency(typeof(SQLite_Android))] // ... public class SQLite_Android : ISQLite { public SQLite_Android() { } public SQLite.Net.SQLiteConnection GetConnection() { var sqliteFilename = "TodoSQLite.db3"; string documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); // Documents folder var path = Path.Combine(documentsPath, sqliteFilename); // Create the connection var conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid(), path); // Return the database connection return conn; } }

我的问题是我试图在我的 PCL 中创建连接但我找不到平台,你需要做的是在每个单独的项目中创建连接。

于 2016-11-23T17:26:26.473 回答