2017-02-10 137 views
2

我正在創建一個Xamarin Forms應用程序。該應用程序包含一個創建新列表的按鈕。列表的名稱和日期保存在一個表中,但列表的內容必須存儲在另一個表中,這需要使用查詢創建。我已經能夠成功插入記錄保存的名稱,並使用以下方法名單的日期表:以編程方式創建SQLite表格

[Table("ToDoLists")] 
public class ShoppingList : INotifyPropertyChanged 
{ 
    private int _id; 

    [PrimaryKey, AutoIncrement] 
    public int Id 
    { 
     get 
     { 
      return _id; 
     } 

     set 
     { 
      _id = value; 
      OnPropertyChanged(nameof(Id)); 
     } 
    } 

    private string _name; 

    [NotNull] 
    public string Name 
    { 
     get 
     { 
      return _name; 
     } 

     set 
     { 
      _name = value; 
      OnPropertyChanged(nameof(Name)); 
     } 
    } 

    private string _date; 

    [NotNull] 
    public string Date 
    { 
     get 
     { 
      return _date; 
     } 

     set 
     { 
      _date = value; 
      OnPropertyChanged(nameof(Date)); 
     } 
    } 

    private string _description; 

    [NotNull] 
    public string Description 
    { 
     get 
     { 
      return _description; 
     } 

     set 
     { 
      _description = value; 
      OnPropertyChanged(nameof(Description)); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void OnPropertyChanged(string propertyName) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

我曾嘗試以下操作:在列表名稱

  • 通行證作爲[Table(tableName)]聲明中的表名,但IDE告訴我只允許使用常量字段,這意味着我無法動態指定表名
  • 我試過閱讀大約SQLiteCommand,但我給出的示例使用SQLite PCL中不可用的函數(除非我錯誤地安裝了SQLite PCL)。

如何在SQLite PCL中使用查詢創建表格?它甚至有可能嗎?有什麼建議麼?

回答

1

SQLite-net看看:

SQLite的網是一個開源的,最小的圖書館允許.NET和Mono應用程序將數據存儲在SQLite的3個數據庫。它首先被設計爲與Xamarin.iOS協同工作,但後來成長爲可以在所有平臺上工作(Xamarin。*,.NET,UWP,Azure等)。

SQLite-net被設計成一個快速方便的數據庫層。它的 設計遵循以下目標:

  • 非常容易與現有項目集成並在所有.NET平臺上運行。
  • SQLite的精簡包裝,快速高效。 (該庫不應該是查詢的性能瓶頸。)
  • 非常簡單的方法可以安全地執行CRUD操作和查詢(使用參數)並以強類型的方式檢索這些查詢的結果。
  • 適用於您的數據模型,不會強迫您更改類。 (包含一個小型反射驅動的ORM層)

首先,創建一個SQLiteAsyncConnection到數據庫:

private SQLiteAsyncConnection database; 
database = new SQLiteAsyncConnection("YourDatabasePath"); 

然後你可以使用的方法CreateTableAsync()創建表:

await database.CreateTableAsync<ShoppingList>(); 

要添加數據到表中,您可以執行如下操作:

public async Task SaveShoppingObjects(List<ShoppingObjects> shoppingsObjects) 
{ 
    await database.RunInTransactionAsync(tran => 
    { 
     foreach (ShoppingObject s in shoppingObjects) 
     { 
      tran.InsertOrReplace(SqliteEntityFactory.Create(s)); 
     } 
    }); 
} 

SqliteEntityFactory.Create是一種幫助您創建表格元素的方法。它可能看起來像這樣:

public static ShoppingList Create(ShoppingObject s) 
{ 
    ShoppingList slist = new ShoppingList(); 
    if (s == null) 
    { 
     return slist; 
    } 
    slist.Id = s.Id; 
    slist.Name = s.Name; 
    // etc... 

    return slist; 
} 

如果我明白你的問題是正確的,那應該是訣竅!

+0

謝謝!我將更仔細地研究SQLite Net! – Razor