Xamarin SQLite-net & Linked issue (重复的列名:objectId)



我最近转到了SQLite net,因为它支持Android 7.0中的新更改,但它给我带来了重大问题。我认为这与链接者有关,但不太确定如何处理这个问题。

首先,如果在debug&发布它的效果非常好。没有问题。如果我随后存档我的应用程序(生成一个签名的APK),它会根据链接器设置在不同的点开始崩溃。

如果我将我的应用程序设置为使用Sdk&用户程序集,我的应用程序立即崩溃。以下是日志的一部分:-

Caused by: android.runtime.JavaProxyThrowable: SQLite.SQLiteException: duplicate column name: objectId
at SQLite.SQLite3.Prepare2 (SQLitePCL.sqlite3 db, System.String query) [0x0001e] in <1096ddd2a2894a619279903f1fa07799>:0 
at SQLite.SQLiteCommand.Prepare () [0x00011] in <1096ddd2a2894a619279903f1fa07799>:0  

如果我将我的应用程序设置为只使用Sdk,它的工作方式会有所不同。它实际上启动了应用程序,下载了一半的数据。如果我试图通过添加更多数据来更新数据,它就会崩溃。该应用程序每次启动时都会崩溃,直到我删除该应用程序的整个本地存储,然后它就完美地工作了。

我也读过关于跳过链接程序集的文章,在这种情况下,我跳过了所有与SQL相关的库。

--linkskip=SQLite-net --linkskip=SQLite.NET --linkskip=SQLite.Net.Platform.XamarinAndroid --linkskip=SQLite.Net.Platform.XamarinAndroidN --linkskip=SQLiteNetExtensions --linkskip=SQLitePCLRaw.batteries_green --linkskip=SQLitePCLRaw.batteries_v2 --linkskip=SQLitePCLRaw.core --linkskip=SQLitePCLRaw.lib.e_sqlite3 --linkskip=SQLitePCLRaw.provider.e_sqlite3 

有人对如何解决这个问题有什么想法吗。我想很快发布一个应用程序,但无法绕过这个问题。我的iOS应用程序也发生了类似的事情,它们运行在同一个数据库上。

提前感谢!

好的,所以我找到了该做什么以及如何克服这个问题。

如果您遇到这个问题,很可能是因为您正在基于模型创建表。在很多情况下,这样做是明智的。但请注意,这是在使用反射。值得注意的是github的常见问题解答:

由于sqlite-net使用反射,MT链接器无法识别它需要各种属性。然后,它将这些属性从类中剥离。

https://github.com/praeclarum/sqlite-net/wiki/FAQ

那现在怎么办

在我看来,你有两种选择。

[保留]属性

谈到这种方法,我不是很有经验。事实上,我还没有找到好的文档来引导我完成它。所以我真的不能对此发表评论。

写出您的创建语句

只需进行

connection.Execute("create table ....."); 

这将允许您创建没有重复列的表,从而使用链接器。好极了

最新更新