0

SQLite.Net Async PCL の非同期 API を使用して ID でアイテムを取得するのに苦労しています。ここに私のモデルクラスがあります

public class Invoice : IEntityBase
{
    public Invoice()
    {
        LineItems = new List<LineItem>();
        DateCreated = DateTime.Now;                
    }

    [PrimaryKey, AutoIncrement, Column("_id")]
    public int Id { get; set; }
    public DateTime DateCreated { get; set; }
    public int Term { get; set; }
    public bool Paid { get; set; }
    public decimal Total { get; set; }
    public string Notes { get; set; }

    [OneToMany(CascadeOperations = CascadeOperation.All)] 
    public List<LineItem> LineItems { get; set; }    

}

1 対多の関係を持つ LineItems はここにあります

[PrimaryKey, AutoIncrement, Column("_id")]
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public string Category { get; set; }
public int Qty { get; set; }

[ForeignKey(typeof(Invoice))]
public int InvoiceId { get; set; }

[ManyToOne]
public Invoice Invoice { get; set; }

コンストラクタは次のとおりです。

public SQLiteAsyncConnection DbConnection;

public InvoiceDatabase(ISQLitePlatform platform, string databasePath)
{
    if (DbConnection == null)
    {
        var connectionAsync = new Func<SQLiteConnectionWithLock>(() =>
                new SQLiteConnectionWithLock
                    (
                        platform,
                        new SQLiteConnectionString(databasePath, false) 
                    )
                );
        DbConnection = new SQLiteAsyncConnection(connectionAsync);
        DbConnection.CreateTableAsync<Invoice>();                    
        DbConnection.CreateTableAsync<LineItem>();                                  
    }             
}

他の CRUD メソッド (Insert、GetALL) は、ID による請求書の取得以外は機能しており、Visual Studio と Xamarin Studio の両方で有用なスタック トレースが得られません。

ここにGetメソッドがあります

private readonly InvoiceDatabase _database;

public InvoiceRepository(ISQLitePlatform platform, string databasePath)
{
    if (_database == null)
    {
        _database = new InvoiceDatabase(platform, databasePath);
    }
}

public async Task<Invoice> GetInvoice(int id)
{
    var result = await _database.DbConnection.Table<Invoice>()
                            .Where(t => t.Id == id)
                            .FirstOrDefaultAsync();
    return result;
}

私は SQLite の Android 実装を渡しています。前述のように、データベースは作成されていますが、Invoice オブジェクトを取得できません。

public Task<Invoice> GetInvoiceWithChildren(int id)
{
    return _database.DbConnection.GetWithChildrenAsync<Invoice>(id);
}

どんな助けでも大歓迎です。

4

1 に答える 1