0

私はSQLite-Net-Extensionsを使用しています。モデルがロードされたときにキャンペーン名にアクセスできるようにOneToOne関係を定義しようとしています。AccountsCampaign

問題は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-Net 拡張読み取りメソッドを使用してみてください。例えば:QueryTable

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

また、外部キーを手動で設定するか、SQLite-Net 拡張機能を使用してデータベースへの関係を書き込んでいることを確認してください。

SQLiteNetExtensions.ExtensionsSQLite-Net 拡張メソッドを使用できるようにするには、名前空間をインポートしていることを確認してください。

import SQLiteNetExtensions.Extensions;

それでも利用できない場合は、パッケージに重複した sqlite.net ライブラリがないことを確認してください。

于 2016-10-09T17:46:44.487 に答える