2016-10-09 6 views
0

SQLite-Net-Extensions을 사용하고 있습니다. 내 Accounts 모델을로드 할 때 캠페인 이름에 액세스 할 수 있도록 Campaign도 포함되도록 OneToOne 관계를 정의하려고합니다.SQLite 및 SQLite-Extensions가 OneToOne 관계를 수행 할 수 없습니다.

문제는 Accounts.Campaign입니다. 항상 null입니다. 두 테이블 모두에 데이터가 있습니다.

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; } 
    } 
} 
:

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 
); 

내 모델입니다 :

여기 SQLite는 내 테이블입니다 내가 accounts 계정 데이터를 검사 할 때 ...

var accounts = this.db.Query<Account>("SELECT * FROM accounts JOIN campaigns ON accounts.CampaignID = campaigns.ID"); 

을 ...

var accounts = this.db.Query<Account>("SELECT * FROM accounts"); 

그리고이 또한 시도

var accounts = this.db.Table<SMA.Models.Accounts>().ToList(); 

:

나는 모든 계정을 가져 오기 위해 다음 코드를 실행 거기에 있지만 Accounts.Campaignnull입니다. 나는 내가 뭘 잘못하고 있는지 보지 못한다.

답변

0

일반 sqlite.net Query 또는 Table 대신 SQLite-Net Extension read methods을 사용해보십시오. 예를 들어 :

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

또한, 당신은 수동으로 외래 키를 설정하거나 데이터베이스에 관계를 작성하는 SQLite는-인터넷 확장을 사용하고 있는지 확인하십시오.

SQLite는 네트 확장 방법을 사용할 수는 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