3

내 응용 프로그램의 새 버전을 릴리스 할 때 내 db 테이블 중 하나에 새 열을 추가하면 데이터베이스가 업데이트되지 않는 문제가 있습니다. 어느 누구든지 새로운 컬럼이나 새로운 테이블이있을 경우 업그레이드 버전의 스크립트를 만드는 법을 알고 있습니까? 그런 일이 아니므로Sqlite.net을 사용하여 데이터베이스 업그레이드 Xamarin 용 Pcl

감사

+0

새 열이 추가되지 않아서 업데이트되지 않습니까? 또는 값이 null입니까? BTW 그 방법을 기억 CreateTable <>() 존재하지 않는 테이블을 생성하거나 기존 테이블을 업데이트하므로 응용 프로그램이 시작될 때마다 테이블 만들기에 대한 논리를 호출하려고합니다. – user3455363

답변

-2

내부적으로 더 명확히하기 위해 여기에서 볼 수있는 MigrateTable이라는 메서드를 호출하기 때문에 CreateTable이 이미 열 업데이트를 수행하고 있음을 기억해야합니다. https://github.com/praeclarum/sqlite-net/blob/master/src/SQLite.cs#L562.

그러나 트리거를 추가하거나 비슷한 것을 추가하는 등 데이터베이스에 대한 고급 수정 사항을 처리해야 할 수 있습니다. 그런 경우 수동으로 수정 작업을 수행하는 것이 좋습니다.

는 자 마린 양식에서 나는이와 결국했습니다 는 https://gist.github.com/matpag/b2545cc22c8e22449cd7eaf6b4910396

지금까지 최선의 전략을 수 있지만 나를 위해 작동하는 것 같다 수 없습니다.

요약 :
당신은 PRAGMA 키워드를 액세스 할 수있는 SQLite 데이터베이스라는 user_version의 내부 플래그에 데이터베이스 버전을 저장해야합니다. 데이터베이스에 연결할 때마다 현재 데이터베이스 버전이 앱의 마지막 데이터베이스 버전과 동일한 지 확인해야합니다. 데이터베이스 업데이트를 수행하고 새 현재 버전을 설정하지 않아도됩니다.

2

그것은, 스크립트의 문제가 아니다. 한 번 실행되는 "패치"가있는 버전을 출시 할 수 있습니다. 모든 레코드를 임시 양식으로 추출 -> 테이블 삭제 -> 다시 작성 (새 컬럼 등으로 작성되었음을 보증합니다) -> 해당 항목을 다시 삽입하십시오. 다시 기록하십시오. 잠시 후, 모든 사용자가 (또는 한도를 설정할 때마다) 새로운 버전으로 이동했다는 것을 알게되면 코드에서 "패치"를 제거 할 수 있습니다.

희망이 있습니다.

1

자동 마이그레이션 기능은 여전히 ​​sqlite.net-PCL 작동하지 않습니다,하지만 다른 sqlite가 패키지에 작업을 수행 것 같습니다 : 실제로 자 마린 인SQLite는-NET-PCL SQLite는 패키지를 추천합니다 .