2017-01-20 9 views
2

최근 안드로이드 7.0 SQlite 문제로 인해 SQLite.NET에서 SQLite-net-pcl로 옮겼습니다.SQLite-net-pcl - ID를 항상 0으로 반환 함 (Xamarin)

내 모든 라이브러리를 업데이트하고 모든 삽입에 관해서 잘 작동하는 과정에서

/드롭 등

내가 가진 유일한 문제는 내가 DB에서 항목을 검색 할 때마다이 항상있다이다 ID가 0입니다. 이로 인해 항목을 업데이트하는 데 문제가 발생했습니다. 누구든지 전에이 문제가 있었습니까?

[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의 항목을 무시하고 새로운 항목을 삽입하지 않습니다. – redent84

+0

또한 SQLite-Net 네임 스페이스는'SQLite '라고 생각합니다.Net'을 사용하는 경우'SQLite'를 사용하고 있습니다. 아마 기본 키 속성이 인식되지 않을 수도 있습니다. – redent84

+0

또한 'ID'를 nullable로 설정하십시오. '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를 반환하는 모든 행 ; 재산에서.

누군가이 문제를 해결하는 데 도움이되는 한 가지 방법은 GetMapping() 메서드를 사용하여 CreateTable()을 사용하여 테이블을 만들 때 사용되는 매핑에 대한 정보를 얻는 것입니다. 예를 들어 :

 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 열에 잘못된 데이터 형식을 사용하고 있다는 것이 었습니다.

잘못된 정의

[RecordIndexId] int PRIMARY KEY NOT NULL 

올바른 정의

[RecordIndexId] integer PRIMARY KEY NOT NULL 

intinteger 데이터 유형 사이 다른 큰이 조금 컨텍스트를 추가 할 수 있습니다. Explained in this SO answer