gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:27:55 25 4
gpt4 key购买 nike

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

方法DeleteAllAsync,根据Visual Studio的代码完成菜单,需要一个 '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>);
}
}

最佳答案

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

internal async Task DeleteAll()
{
await database.DeleteAllAsync<Item>();
}

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

更快的方法

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

internal async Task DeleteAll()
{
await database.DropTableAsync<Item>();
await database.CreateTableAsync<Item>();
}

完整示例

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

public class ItemDb
{
readonly SQLiteAsyncConnection database;
readonly SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1, 1);

public ItemDb(string dbPath)
{
database = new SQLiteAsyncConnection(dbPath);
}

internal async Task DeleteAllItems()
{
await semaphoreSlim.WaitAsync().ConfigureAwait(false);

await Initialize<Item>().ConfigureAwait(false);

try
{
await database.DropTableAsync<Item>().ConfigureAwait(false);
await database.CreateTableAsync<Item>().ConfigureAwait(false);
}
finally
{
semaphoreSlim.Release();
}
}

async Task Initialize<T>()
{
if (!DatabaseConnection.TableMappings.Any(x => x.MappedType.Name == typeof(T).Name))
{
await DatabaseConnection.EnableWriteAheadLoggingAsync().ConfigureAwait(false);
await DatabaseConnection.CreateTablesAsync(CreateFlags.None, typeof(T)).ConfigureAwait(false);
}
}
}

关于c# - 创建/获取 TableMapping 映射以发送到 SQLiteAsyncConnection.DeleteAll(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48104239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com