Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 使用CreateTable(CreateFlags.FullTextSearch4)不会自动递增PK_Sqlite_Xamarin_Fts4 - Fatal编程技术网

Sqlite 使用CreateTable(CreateFlags.FullTextSearch4)不会自动递增PK

Sqlite 使用CreateTable(CreateFlags.FullTextSearch4)不会自动递增PK,sqlite,xamarin,fts4,Sqlite,Xamarin,Fts4,我正在Visual Studio 2015上使用Xamarin和此SQLite插件: 以下是我的算法和对问题的解释: public class MyModel { [PrimaryKey, AutoIncrement] public int _id { get; set; } public string bla { get; set; } public string ble { get; set; } public MyModel() {

我正在Visual Studio 2015上使用Xamarin和此SQLite插件:

以下是我的算法和对问题的解释:

public class MyModel
{
     [PrimaryKey, AutoIncrement]
     public int _id { get; set; }
     public string bla { get; set; }
     public string ble { get; set; }

    public MyModel()
    {

    }
}
然后:

上面的代码为insertCount和item返回1。\u id总是按其应该的方式更新。 但是当我稍后查询表时,所有行的_id始终为0。例如:

var tokens = mySearchBar.Text;
string query = "SELECT * FROM MyModel WHERE MyModel MATCH '" + tokens + "'";
List<MyModel> result = conn.Query<MyModel>(query);
这似乎有效,但感觉不对,似乎并没有返回所有可能的结果。但主要问题是,它会为每个_id返回0。我可以通过以下方式检查它:

var bli = conn.Query<MyModel>("SELECT * FROM MyModel");
所有行_id均为0。你知道我为什么要修它,怎么修吗

如果创建不带fts4标志的表,则没有问题。但是我不能做匹配搜索

感谢

,主要称为虚拟表,是一种扩展模块,允许用户使用内置全文索引创建特殊表

它忽略除列名以外的所有内容,例如自动递增、主键、唯一、甚至整数。FTS表的所有内容都是文本。 此表有一个名为rowid的privaterow。它的行为方式与普通SQLite表的rowid列相同,只是FTS表的rowid列中存储的值保持不变

从选定行获取和标识的唯一方法是执行以下操作:

select rowid,* from thetable
如果尝试在公共SQLite net查询中执行此操作,则不会获得rowid

SQLite表方案:

可能的解决办法:

1-在你的情况下,我不知道你是否真的需要这个Id。但是你可以删除它,如果它与查询无关的话。是的,我知道你在问题中发布了

2-插入行时,只需添加一个新列并在其中放置一些标识行的信息

3-SQLite net不允许您使用IDataReader进行查询和解析结果。因此,您可以使用另一个允许解析查询结果以获取rowid的android和ios

4-不要使用FTS表。使用普通表并进行如下查询:

var query = conn.Table<MyModel>().Where(v => v.bla.Contains("mystring"));

搞定了。我的解决方案是添加一个由我自己创建的字符串id,并将其设置为pk。
var query = conn.Table<MyModel>().Where(v => v.bla.Contains("mystring"));