- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从通过 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/
我有下表 **Track Table** +---------------+---------------+--------------------+ | TrackId | Track
根据msdn http://msdn.microsoft.com/en-us/library/ks92fwwh.aspx The DataTableMapping name can be passed
我正在尝试从通过 Xamarin.forms 的 nuget 包 sqlite-net-pcl(1.5.166-beta) 访问的 sqlite 数据库表中删除所有项目。 方法DeleteAllAsy
此代码片段引发错误: Update unable to find TableMapping['Table'] or DataTable 'Table'.) on adapter.Update(ds);
我是一名优秀的程序员,十分优秀!