以编程方式创建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;
}
如果我明白你的问题是正确的,那应该是诀窍!
谢谢!我将更仔细地研究SQLite Net! – Razor