Xamarin sqlite 不能使用 struct 作为表数据类型
Posted
技术标签:
【中文标题】Xamarin sqlite 不能使用 struct 作为表数据类型【英文标题】:Xamarin sqlite cannot use struct as table data type 【发布时间】:2021-12-11 01:17:13 【问题描述】:使用 sqlite-net-pcl 1.8.116 如果我定义一个结构并从中创建一个表在数据库中,如果没有得到 System.ArgumentException: 'method arguments are incompatible',我就无法从中读取值。我可以制作表格并添加行。只有回读失败。
如果我把我的结构变成一个类,它就可以正常工作。我已经查看并查看了是否根本不支持结构,但我没有看到任何表明这一点的东西,甚至没有看到其他人有同样的问题。
我这样创建和使用数据库,失败了
var db = new SQLiteAsyncConnection(path);
db.CreateTableAsync<Flight>().Wait();
var affected = await db.InsertAsync(new Flight());
var get = await db.Table<Flight>().ToListAsync(); //exception
我可以做同样的事情,但同样的例外,使用类似的 sqlQuery
var flights = await db.QueryAsync<Flight>("select * from Flight where FlightID==?",id);
这篇文章的精简结构是
public struct Flight
[PrimaryKey, AutoIncrement]
public int Id get; set;
public long Start get; set;
public long End get; set;
public string Description get; set;
如果我将结构更改为类,则没有问题。结构是不是像这样不被支持?
【问题讨论】:
【参考方案1】:是的,正如你所说,当我们使用 nuget sqlite-net-pcl 1.8.116 时就是这种情况。但是你可以尝试使用 nuget sqlite-net-pcl 的 1.7.335 版本。当我使用 1.7.335 版本创建表格并插入一些项目时,没有这样的错误。
我发布了一个关于这个问题的新问题,你可以在这里跟进:https://github.com/praeclarum/sqlite-net/issues/1075。
感谢您对 xamarin 的反馈。
最好的问候!
【讨论】:
感谢您确认。只要我知道不只是我做错了,我就可以继续前进。幸运的是,就我而言,现在让它成为一个类并不是一个真正的问题。 我也可以确认这一点,回滚到 1.7.335 “解决”了这个问题。 struct 真的不再受支持了吗?现在是我做出改变的好时机。以上是关于Xamarin sqlite 不能使用 struct 作为表数据类型的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin SQLite教程Xamarin.iOS项目添加引用
Xamarin/SQLite/C# - 如何使用菜单项删除从列表视图和 SQLite 表中删除一行
我应该在 Xamarin.Forms 上使用哪些 SQLite (sqlite-net-pcl) 标志?
使用 SQL/SQLite 工具箱 Visual Studio 2019 在 SQLite 数据库和 Xamarin.Android 项目之间建立连接