问题描述
System.TypeLoadException: '无法从 typeref 解析带有标记 01000150 的类型(程序集'sqlite-net,版本=1.7.335.0,Culture=neutral,PublicKeyToken=null'中的预期类'sqlite.CreateTableResult')'>
我的连接代码是:
this.db = new sqliteAsyncConnection(dbPath,storeDateTimeAsTicks: true);
this.db.CreateTableAsync<User>().Wait();
有什么建议可以解决这个问题吗?
解决方法
根据你贴出的错误日志我们复现这个问题是不一样的,你可以参考官方文档Xamarin.Forms Local Databases。
并且上面的文档中包含了一个很好的示例,代码封装得很好,非常简洁。你可以在这里查看Todo。
TodoItemDatabase.cs
如下:
public class TodoItemDatabase
{
static SQLiteAsyncConnection Database;
public static readonly AsyncLazy<TodoItemDatabase> Instance = new AsyncLazy<TodoItemDatabase>(async () =>
{
var instance = new TodoItemDatabase();
CreateTableResult result = await Database.CreateTableAsync<TodoItem>();
return instance;
});
public TodoItemDatabase()
{
Database = new SQLiteAsyncConnection(Constants.DatabasePath,Constants.Flags);
}
public Task<List<TodoItem>> GetItemsAsync()
{
return Database.Table<TodoItem>().ToListAsync();
}
public Task<List<TodoItem>> GetItemsNotDoneAsync()
{
return Database.QueryAsync<TodoItem>("SELECT * FROM [TodoItem] WHERE [Done] = 0");
}
public Task<TodoItem> GetItemAsync(int id)
{
return Database.Table<TodoItem>().Where(i => i.ID == id).FirstOrDefaultAsync();
}
public Task<int> SaveItemAsync(TodoItem item)
{
if (item.ID != 0)
{
return Database.UpdateAsync(item);
}
else
{
return Database.InsertAsync(item);
}
}
public Task<int> DeleteItemAsync(TodoItem item)
{
return Database.DeleteAsync(item);
}
}