0

我正在使用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.Campaign但是null. 我似乎看不出我做错了什么。

4

1 回答 1

0

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

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

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

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

import SQLiteNetExtensions.Extensions;

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

于 2016-10-09T17:46:44.487 回答