私はSQLite-Net-Extensionsを使用しています。私はOneToOne
の関係を定義しようとしていますので、Accounts
モデルがロードされると、Campaign
も含まれているので、キャンペーン名にアクセスできます。SQLiteとSQLite-ExtensionsはOneToOneのリレーションシップを実行できません
問題は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; }
}
}
私はアカウントのすべてフェッチするために、次のコードを実行します。私はaccounts
アカウントデータを検査する場合
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.Campaign
はnull
です。私は何が間違っているのか分かりません。
'GetAllWithChildren'は利用できません。 'this.db = new SQLiteConnection(新しいSQLiteConnectionString(this.dbFileName、true).ConnectionString);'。 SQLite-Net-Extensionsの接続方法を使用する必要がありますか? – BugHunterUK
@BugHunterUK SQLite-Net Extensionsは標準のsqlite.net接続クラスを継承しているので、接続は正常に動作するはずです。拡張メソッドを呼び出すために 'SQLiteNetExtensions.Extensions'名前空間をインポートしていますか? – redent84
私は、 'SQLite.Net'の代わりに' SQLite'を使って接続を作成していました。今はうまく動作します。 – BugHunterUK