以编程方式创建SQLite表格

问题描述:

我正在创建一个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中使用查询创建表格?它甚至有可能吗?有什么建议么?

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