2016-10-09 7 views
0

私は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.Campaignnullです。私は何が間違っているのか分かりません。

答えて

0

plain sqlite.net QueryまたはTableの代わりにSQLite-Net Extension read methodsを使用してみてください。たとえば:

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

はまた、あなたが手動で外部キーを設定したり、データベースとの関係を記述するためのSQLite-Netの拡張機能を使用していることを確認してください。利用可能SQLiteの-Netの拡張方法は、あなたがSQLiteNetExtensions.Extensions名前空間をインポートしていることを確認してくださいようにするに

import SQLiteNetExtensions.Extensions; 

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

+0

'GetAllWithChildren'は利用できません。 'this.db = new SQLiteConnection(新しいSQLiteConnectionString(this.dbFileName、true).ConnectionString);'。 SQLite-Net-Extensionsの接続方法を使用する必要がありますか? – BugHunterUK

+0

@BugHunterUK SQLite-Net Extensionsは標準のsqlite.net接続クラスを継承しているので、接続は正常に動作するはずです。拡張メソッドを呼び出すために 'SQLiteNetExtensions.Extensions'名前空間をインポートしていますか? – redent84

+0

私は、 'SQLite.Net'の代わりに' SQLite'を使って接続を作成していました。今はうまく動作します。 – BugHunterUK

関連する問題