创建/获取 TableMapping 映射以发送到 SQLiteAsyncConnection.DeleteAll()

Sta*_*er2 3 c# sqlite xamarin

我正在尝试删除通过 Xamarin.forms 的 nuget 包 sqlite-net-pcl(1.5.166-beta) 访问的 sqlite 数据库表中的所有项目。

根据 Visual Studio 的代码完成菜单,DeleteAllAsync 方法采用“TableMapping Map”。您能帮我找出在这种情况下“TableMapping Map”是什么吗?

在哪里可以找到 sqlite-net-pcl nuget 包的文档?nuget 上没有列出它的项目页面。

下面的代码片段提供了上下文和对DeleteAllAsync的错误调用

public class ItemDb
{
    readonly SQLiteAsyncConnection database;

    public ItemDb(string dbPath)
    {
        database = new SQLiteAsyncConnection(dbPath);
        database.CreateTableAsync<Item>().Wait();
    } 
    internal void DeleteAll()
    {
        database.DeleteAllAsync(database.Table<Item>);
    }
}
Run Code Online (Sandbox Code Playgroud)

Bra*_*ick 6

您只需指定Type要使用的DeleteAllAsync,它就会从表中删除所有项目。

internal async Task DeleteAll()
{
    await database.DeleteAllAsync<Item>();
}
Run Code Online (Sandbox Code Playgroud)

DeleteAllAsync是 sqlite-net-pcl v1.5 中的新功能,v1.5 仍处于预发布阶段。DeleteAllAsync官方文档在这里,一旦 v1.5 升级到稳定 版本,它可能会更新:https: //github.com/praeclarum/sqlite-net/wiki

更快的方法

删除表中所有项目的更快方法是删除表并重新创建它(假设表有许多项目)。

internal async Task DeleteAll()
{
    await database.DropTableAsync<Item>();
    await database.CreateTableAsync<Item>();
}
Run Code Online (Sandbox Code Playgroud)

完整示例

这是一个完整的示例,有助于提高性能并避免多线程问题。

internal async Task DeleteAll()
{
    await database.DeleteAllAsync<Item>();
}
Run Code Online (Sandbox Code Playgroud)