2017-01-20 22 views
2

最近、Android 7.0 SQliteの問題のためSQLite.NETからSQLite-net-pclに移動しました。SQLite-net-pcl - 常にIDを0として返す(Xamarin)

私はすべての私のライブラリを更新しているし、すべての挿入に関してうまく機能している過程で

/ドロップなど

私が持っている唯一の問題は、私がDBからアイテムを取り出すたびに、それは常に持っているということですこれは、アイテムの更新に問題を引き起こしています。以前誰かがこの問題を抱えていましたか?

[SQLite.PrimaryKey, SQLite.AutoIncrement] 
    public int ID { get; set; } 
    public string objectId { get; set; } 
    public DateTime createdAt { get; set; } 
    public DateTime updatedAt { get; set; } 
    public string Title { get; set; } 

ありがとうございます。

+0

'AutoIncrement'主キーで' InsertOrReplace'を使用していないことを確認してください。常にid 0のitemを上書きし、新しいitemを挿入しません。 – redent84

+0

さらに、私はSQLite-Net名前空間が 'SQLiteだと思います。あなたのサンプルで 'SQLite'を使用していますが、主キー属性が認識されていない可能性があります。 – redent84

+0

また、あなたの 'ID'をヌル可能にしてください。 'public int? ID {get;セット; } ' – SushiHangover

答えて

0

CreateComand(query)ExecuteNonQuery()の方法で表を作成したかどうかを確認してください。この場合は、CreateTable<Type>()メソッドを使用してテーブルを作成してください。主キーと自動インクリメントの属性は、上記の方法で表を作成するときに初期化されます。

0

ほとんど同じ状況です。私は単純に設定を入力し忘れていたのを除いて0

class ToDo : Java.Lang.Object 
{ 
    [PrimaryKey, AutoIncrement] 
    public int ID { get; } 

のIDを返すすべての行と 。プロパティで。

この種の問題を抱える人を助ける1つのことは、CreateTable()を使用してテーブルを作成するときに使用されるマッピングに関する情報を得るためにGetMapping()メソッドを使用することです。例として :

 Toast.MakeText(this, db.GetMapping<ToDo>().TableName.ToString(), ToastLength.Long).Show(); 
     Toast.MakeText(this, db.GetMapping<ToDo>().HasAutoIncPK.ToString(), ToastLength.Long).Show(); 

私は自動インクリメント(偽HasAutoIncPK =は)私のテーブルの上に設定されていなかったことが判明、これを使用しました。

0

これは私

がSQLite.Net.Attributesを使用してのために働いて、これを使用してみてください。

[PrimaryKey, AutoIncrement] 
    public int? Id { get; set; } 
0

私はここで同じ問題を抱えています。

利用可能なCreateTableメソッドを使用するのではなく、スムーズな更新プロセスを進めるために手動でテーブルを作成しました。

私は最終的には私のPRIMARY KEY列に間違ったデータ型を使用していたということでした。 intintegerデータ型の間で異なる大きながある少しコンテキストを追加するには

間違った定義

[RecordIndexId] int PRIMARY KEY NOT NULL 

正しい定義

[RecordIndexId] integer PRIMARY KEY NOT NULL 

Explained in this SO answer

関連する問題