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.Campaign
是 null
。我似乎看不出我做错了什么。
尝试使用 SQLite-Net Extension read methods 而不是普通的 sqlite.net Query
或 Table
。例如:
var accounts = this.db.GetAllWithChildren<Account>();
此外,请确保您手动设置外键或使用 SQLite-Net Extensions 将关系写入数据库。
要使 SQLite-Net Extensions 方法可用,请确保您正在导入 SQLiteNetExtensions.Extensions
命名空间:
import SQLiteNetExtensions.Extensions;
如果它们仍然不可用,请确保您的包中没有重复的 sqlite.net 库。
我正在使用 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
。我似乎看不出我做错了什么。
尝试使用 SQLite-Net Extension read methods 而不是普通的 sqlite.net Query
或 Table
。例如:
var accounts = this.db.GetAllWithChildren<Account>();
此外,请确保您手动设置外键或使用 SQLite-Net Extensions 将关系写入数据库。
要使 SQLite-Net Extensions 方法可用,请确保您正在导入 SQLiteNetExtensions.Extensions
命名空间:
import SQLiteNetExtensions.Extensions;
如果它们仍然不可用,请确保您的包中没有重复的 sqlite.net 库。