2014-10-29 3 views
1

내 Windows Phone 범용 애플리케이션에서 sqlite 용 sqlite-net을 사용하고 있습니다. 테이블 및 열 속성을 사용하여 다음과 같은 클래스를 사용하고 비동기 연결을 사용하여 sqlite에 데이터를 모두 추가합니다. 잘 작동하지만 Id 열이 기본 키가 아닌 자동 증가되지 않습니다. 다른 누구도이 문제에 직면 해 있습니까? 다음은 내 코드입니다.AutoIncrement가 sqlite-net과 작동하지 않습니다. Windows phone 범용 앱

[Table("Account")] 
public class Account 
{ 
    [PrimaryKey, AutoIncrement] 
    [Column("Id")] 
    public int Id { get; set; } 

    [Column("FirstName")] 
    public string FirstName { get; set; } 

    [Column("LastName")] 
    public string LastName { get; set; } 

    [Ignore] 
    public string FullName { get; set; } 
    } 


    SQLite.SQLiteAsyncConnection conn = new SQLite.SQLiteAsyncConnection("database.sqlite"); 
     var result = await conn.CreateTableAsync<Account>(); 

     var _accountList = new Account(); 
     _accountList.FirstName = "Name 1"; 
     _accountList.LastName = "------------"; 
     var result1 = await conn.InsertAsync(_accountList); 

     _accountList = new Account(); 
     _accountList.FirstName = "Name 2"; 
     _accountList.LastName = "------------"; 
     result1 = await conn.InsertAsync(_accountList); 

     var list = await conn.Table<Account>().ToListAsync(); 

     var item = list; 

테이블을 읽을 때 모든 레코드에 대해 항상 0입니다. 이 문제를 해결할 방법이 있습니까?

답변

-1

아래 코드를 사용하면 도움이 될 것입니다.

[SQLite.PrimaryKey, SQLite.AutoIncrement] 
     public int Id { get; set; } 
+0

정확히 무엇이 필요한가요? –

0

나는 비슷한 문제가있었습니다.

Step 1: Goto C:\Program Files (x86)\Microsoft XDE\8.1\ 
Step 2: Run XdeCleanup.exe 

및 응용 프로그램을 다시 실행 :

시뮬레이터를 다시 시도하십시오.

기본 키가없고 자동 증분없이 데이터베이스를 생성 한 다음 코드에 추가했기 때문에 이런 일이 일어났습니다. 그러나 어떻게 든 PK & AI가없는 상태가 시뮬레이터에 캐시되었습니다.

0

이것은 오래된 게시물이지만, 아마도 내 대답은 누군가를 도울 수 있습니다. 거의 그렇게 희망합니다. 그렇지 않으면 "0"의 값을 삽입하는 방법으로 전송됩니다,

[PrimaryKey, AutoIncrement] 
[Column("Id")] 
public int? Id { get; set; } 

는 기본 키가 Null을 허용하는 것이 중요하고, SQLite는은 이미 존재하는 변경되지 않습니다 : 첫째는 널 (NULL) 귀하의 ID 필드를 선언 정수 값이고, 다음 삽입은 테이블에 다른 "0"색인을 넣으려고하기 때문에 오류가 발생합니다.

그리고 CreateTable 섹션에서 createFlags 인수를 지정하십시오. 생략하면 기본값은 "none"입니다.

이것은 내가하는 방법입니다.

using (_connection = new SQLite.SQLiteConnection(_dbPath)) 
{ 
    _connection.CreateTable<T>(SQLite.CreateFlags.ImplicitPK | SQLite.CreateFlags.AutoIncPK); 
} 

이 뜻이 당신의 ID 필드 인덱스 기본 키, autoincremental했다 "_dbPath는"IsolatedStorage에서 데이터베이스 파일의 경로입니다.