SQLite-NET-PCL 卡在 CreateTableAsync<Type>() 上



我正在使用.NET Framework和SQLite.NET-PCL开发Xamarin移动应用程序。我的XAML表单使用MVVM架构,在我的主表单上,我试图在ListView中显示所有电影,首先我确保视图本身正常工作,现在我正试图将其连接到我的DB服务。当DB服务初始化并尝试使用CreateTableAsyc((创建任何表时,即使看起来成功了,程序也会被困在该函数中。

最初,我认为这是由于使用创建的类作为属性,而SQLite不支持这一点,所以我纠正了这一点。接下来,我检查了是否是因为没有使用硬件加速,所以我启用了它。然后我尝试使用ContinueWith((进行调试,并将结果打印到调试控制台,它显示"已迁移",但从未退出该功能。Xamarin XAML热重新加载然后超时。是什么原因造成的?

其中一种类型的示例:

using SQLite;
public class Movie
{
public Movie() {}
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Title { get; set; }
public DateTime Length { get; set; }
}

数据库服务

using Xamarin.Essentials;
public static class DBService
{
private static SQLiteAsyncConnection dbConn;
public static async Task Init()
{
if (dbConn != null)
{
return;
}
string databasePath = Path.Combine(FileSystem.AppDataDirectory, "Movies.db");
dbConn = new SQLiteAsyncConnection(databasePath, false);
await dbConn.CreateTableAsync<Movie>().ContinueWith(results =>
{
Debug.WriteLine(results.Result.ToString()); // This prints migrated
});
Debug.WriteLine("After table created"); // This never prints
}
public static async Task<IEnumerable<Movie>> GetMovies()
{
await Init();
return await dbConn.Table<Movie>().ToListAsync();
}
}

MovieViewModel(主视图的视图模型(

public class MovieViewModel
{
public List<Movie> Movies { get; set; }

public MovieViewModel ()
{
Movies = (List<Movie>)DBService.GetMovies().Result;
}
}

在构造函数返回后运行的东西中换行:

MainThread.BeginInvoke(async () => Movies = (await DBService.GetMovies()).ToList() );

可选:
GetMovies可以返回一个List,以匹配Movies声明。则不需要.ToList()(List<Movie>)强制转换:

public static async Task<List<Movie>> GetMovies() { ... }
MainThread.BeginInvoke(async () => Movies = await DBService.GetMovies() );

相关内容

最新更新