SQLite 和 SQLite-Extensions 不能执行一对一关系

SQLite and SQLite-Extensions can not perform OneToOne relationsip

我正在使用 SQLite-Net-Extensions。我正在尝试定义一个 OneToOne 关系,以便在加载我的 Accounts 模型时它也将包含 Campaign 以便我可以访问活动名称。

问题是 Accounts.Campaign 总是 null。我在两个表中都有数据。

这是我在 SQLite 中的表:

CREATE TABLE `campaigns` (
    `Id`    INTEGER PRIMARY KEY AUTOINCREMENT,
    `Name`  TEXT UNIQUE
);

CREATE TABLE `accounts` (
    `Id`    INTEGER PRIMARY KEY AUTOINCREMENT,
    `CampaignId`    INTEGER,
    `MobileNumber`  TEXT UNIQUE,
    `Password`  TEXT
);

以下是我的模型:

namespace SMA.Models
{
    [SQLite.Table("accounts")]
    class Accounts
    {
        [PrimaryKey, AutoIncrement]
        public Int32 Id { get; set; }
        [ForeignKey(typeof(Campaigns))]
        public Int32 CampaignId { get; set; }
        [MaxLength(11)]
        public string MobileNumber { get; set; }
        [MaxLength(50)]
        public string Password { get; set; }

       [OneToOne("Id")]
       public Campaigns Campaign { get; set; }
    }
}

namespace SMA.Models
{
    [Table("campaigns")]
    class Campaigns
    {
        [PrimaryKey, AutoIncrement]
        public Int32 Id { get; set; }
        [MaxLength(50)]
        public string Name { get; set; }
    }
}

我运行以下代码获取所有账户:

var accounts = this.db.Table<SMA.Models.Accounts>().ToList();

也尝试过...

var accounts = this.db.Query<Account>("SELECT * FROM accounts");

还有...

var accounts = this.db.Query<Account>("SELECT * FROM accounts JOIN campaigns ON accounts.CampaignID = campaigns.ID");

当我检查 accounts 时,帐户数据在那里,但 Accounts.Campaignnull。我似乎看不出我做错了什么。

尝试使用 SQLite-Net Extension read methods 而不是普通的 sqlite.net QueryTable。例如:

var accounts = this.db.GetAllWithChildren<Account>();

此外,请确保您手动设置外键或使用 SQLite-Net Extensions 将关系写入数据库。

要使 SQLite-Net Extensions 方法可用,请确保您正在导入 SQLiteNetExtensions.Extensions 命名空间:

import SQLiteNetExtensions.Extensions;

如果它们仍然不可用,请确保您的包中没有重复的 sqlite.net 库。