SQLite和SQLite- extensions不支持OneToOne关系

本文关键字:OneToOne 关系 不支持 extensions SQLite- SQLite | 更新日期: 2023-09-27 18:12:25

我正在使用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();

Also tried…

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和SQLite- extensions不支持OneToOne关系

尝试使用SQLite-Net扩展读取方法而不是普通的sqlite.net QueryTable。例如:

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

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

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

import SQLiteNetExtensions.Extensions;

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