Sqlite.NET官方文档
开始sqlite-net被设计为在.NET环境中使用sqlite非常简单。 该库包含可用于控制表的构造的简单属性。 在一个简单的股票程序中,您可以使用: public class Stock
{
[PrimaryKey,AutoIncrement]
public int Id { get; set; }
public string Symbol { get; set; }
}
public class Valuation
{
[PrimaryKey,AutoIncrement]
public int Id { get; set; }
[Indexed]
public int StockId { get; set; }
public DateTime Time { get; set; }
public decimal Price { get; set; }
}
有了这些,您可以通过调用CreateTable自动在数据库中生成表格: var db = new SQLiteConnection("foofoo");
db.CreateTable<Stock>();
db.CreateTable<Valuation>();
您可以使用 public static void AddStock(SQLiteConnection db,string symbol) {
var Id = db.Insert(new Stock() {
Symbol = symbol
});
Console.WriteLine("{0}",Id);
}
您可以使用 public static IEnumerable<Valuation> QueryValuations (SQLiteConnection db,Stock stock)
{
return db.Query<Valuation> ("select * from Valuation where StockId = ?",stock.Id);
}
Query方法的通用参数指定要为每行创建的对象的类型。 它可以是您的表类或其公共属性与查询返回的列匹配的任何其他类。 例如,我们可以将上面的查询重写为: public class Val {
public decimal Money { get; set; }
public DateTime Date { get; set; }
}
public static IEnumerable<Val> QueryVals (SQLiteConnection db,Stock stock)
{
return db.Query<Val> ("select "Price" as "Money","Time" as "Date" from Valuation where StockId = ?",stock.Id);
}
更新必须使用 Asynchronous API您可以调用不会阻塞的”asynchronous API”。 您可能会考虑将移动应用程序的异步API用于增加响应性。 异步库使用任务并行库(TPL)。 因此,Task对象的正常使用以及async和await关键字将适用于您。 一旦定义了实体,就可以通过调用 var conn = new SQLiteAsyncConnection("foofoo");
conn.CreateTableAsync<Stock>().ContinueWith((results) => { Debug.WriteLine("Table created!"); });
您可以使用 Stock stock = new Stock()
{
Symbol = "AAPL"
};
var conn = new SQLiteAsyncConnection("foofoo");
conn.InsertAsync(stock).ContinueWith((t) => { Debug.WriteLine("New customer ID: {0}",stock.Id); });
查询数据最直接的方法是使用Table方法。 这将返回一个 var conn = new SQLiteAsyncConnection("foofoo");
var query = conn.Table<Stock>().Where(v => v.Symbol.StartsWith("A"));
query.ToListAsync().ContinueWith((t) => { foreach (var stock in t.Result) Debug.WriteLine("Stock: " + stock.Symbol); });
有一些低层方法可用。 您也可以通过 另一个有用的方法是 var conn = new SQLiteAsyncConnection("foofoo");
conn.ExecuteScalarAsync<int>("select count(*) from Stock",null).ContinueWith((t) => { Debug.WriteLine(string.Format("Found '{0}' stock items.",t.Result)); });
特征ORMORM能够获得一个.NET类的定义并将其转换为SQL表定义。 (大多数ORM都是朝另一个方向发展。)它通过检查您的类的所有公共属性来完成此任务,并且可以使用可用于指定列详细信息的属性进行辅助。
属性支持以下数据类型:
事务库支持嵌套事务。 它们都可以在同步API和异步API中使用。 同步API当使用同步 var db = new SQLiteConnection(path);
db.RunInTransaction(() => { // database calls inside the transaction db.Insert(stock); db.Insert(valuation); });
请注意,在 异步API在使用异步 var db = new SQLiteAsyncConnection(path);
db.RunInTransactionAsync(tran => {
// database calls inside the transaction
tran.Insert(stock);
tran.Insert(valuation);
});
请注意,在 低层API大部分时间
处理错误如果您的事务代码抛出一个异常,那么在事务回滚后,它将冒泡到 自动迁移代码更改。 在数据库已经部署和使用了一段时间之后,有时候需要将新值与表(实体)相关联。 由于关系模型的原因,数据库中的实体可以通过添加新表并将这些新表与实体相关联来获得与它们相关联的值。 但是,这并不总是理想的,因为无论何时需要查询实体的值,都需要执行连接。 为了帮助,sqlite-net支持自动迁移。 细节当调用 自动迁移目前只支持添加新列。 如果您的类具有与表中的列没有关联的新属性,则会执行 不支持的其他迁移包括删除列,更改列的类型和重命名列。 如果有需求,可以添加这些迁移。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |