SQLite和SQLite-Extensions无法执行OneToOne relationsip

时间:2016-10-09 12:54:50

标签: c# .net sqlite-net sqlite-net-extensions

我正在使用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。我似乎无法看到我做错了什么。

1 个答案:

答案 0 :(得分:0)

尝试使用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库。