iOS 앱에서 데이터 사용

DataAccess_Adv 샘플에서는 사용자 입력 및 CRUD(만들기, 읽기, 업데이트 및 삭제) 데이터베이스 기능을 허용하는 작업 애플리케이션을 보여 줍니다. 애플리케이션은 목록과 데이터 입력 양식의 두 화면으로 구성됩니다. 모든 데이터 액세스 코드는 수정 없이 iOS 및 Android에서 다시 사용할 수 있습니다.

일부 데이터를 추가한 후 애플리케이션 화면은 iOS에서 다음과 같이 표시됩니다.

iOS sample list

iOS sample detail

iOS 프로젝트는 아래에 나와 있습니다. 이 섹션에 표시된 코드는 Orm 디렉터리 내에 포함되어 있습니다.

iOS project tree

iOS의 ViewControllers에 대한 네이티브 UI 코드가 이 문서의 범위를 벗어났습니다. UI 컨트롤에 대한 자세한 내용은 테이블 및 셀 작업 iOS 가이드를 참조하세요.

읽음

샘플에는 다음과 같은 몇 가지 읽기 작업이 있습니다.

  • 목록 읽기
  • 개별 레코드 읽기

클래스의 StockDatabase 두 메서드는 다음과 같습니다.

public IEnumerable<Stock> GetStocks ()
{
    lock (locker) {
        return (from i in Table<Stock> () select i).ToList ();
    }
}
public Stock GetStock (int id)
{
    lock (locker) {
        return Table<Stock>().FirstOrDefault(x => x.Id == id);
    }
}

iOS는 데이터를 .로 UITableView다르게 렌더링합니다.

만들기 및 업데이트

애플리케이션 코드를 간소화하기 위해 PrimaryKey가 설정되었는지 여부에 따라 Insert 또는 Update를 수행하는 단일 저장 메서드가 제공됩니다. 속성이 Id 특성으로 [PrimaryKey] 표시되어 있으므로 코드에서 설정하면 안 됩니다. 이 메서드는 기본 키 속성을 검사 값이 이전에 저장되었는지 여부를 검색하고 그에 따라 개체를 삽입하거나 업데이트합니다.

public int SaveStock (Stock item)
{
    lock (locker) {
        if (item.Id != 0) {
            Update (item);
            return item.Id;
    } else {
            return Insert (item);
        }
    }
}

실제 애플리케이션에는 일반적으로 일부 유효성 검사(예: 필수 필드, 최소 길이 또는 기타 비즈니스 규칙)가 필요합니다. 좋은 플랫폼 간 애플리케이션은 공유 코드에서 가능한 한 많은 유효성 검사 논리를 구현하여 플랫폼의 기능에 따라 표시하기 위해 유효성 검사 오류를 UI에 다시 전달합니다.

삭제

Insert 메서드 및 메서드와 Update 달리 메서드는 Delete<T> 전체 Stock 개체가 아닌 기본 키 값만 허용할 수 있습니다. 이 예제 Stock 에서는 개체가 메서드에 전달되지만 Id 속성만 메서드에 Delete<T> 전달됩니다.

public int DeleteStock(Stock stock)
{
    lock (locker) {
        return Delete<Stock> (stock.Id);
    }
}

미리 채워진 SQLite 데이터베이스 파일 사용

일부 애플리케이션은 이미 데이터로 채워진 데이터베이스와 함께 제공됩니다. 앱과 함께 기존 SQLite 데이터베이스 파일을 전달하고 액세스하기 전에 쓰기 가능한 디렉터리에 복사하여 모바일 애플리케이션에서 이 작업을 쉽게 수행할 수 있습니다. SQLite는 여러 플랫폼에서 사용되는 표준 파일 형식이므로 SQLite 데이터베이스 파일을 만드는 데 사용할 수 있는 여러 도구가 있습니다.

  • SQLite Manager Firefox 확장 – Mac 및 Windows에서 작동하며 iOS 및 Android와 호환되는 파일을 생성합니다.
  • 명령줄 – www.sqlite.org/sqlite.html 참조하세요.

앱을 사용하여 배포할 데이터베이스 파일을 만들 때 테이블 및 열의 이름을 확인하여 코드가 예상하는 것과 일치하는지 확인합니다. 특히 이름이 C# 클래스 및 속성(또는 연결된 사용자 지정 특성)과 일치할 것으로 예상되는 SQLite.NET 사용하는 경우 특히 그렇습니다.

iOS의 경우 애플리케이션에 sqlite 파일을 포함하고 빌드 작업: 콘텐츠표시되어 있는지 확인합니다. 데이터 메서드를 FinishedLaunching 호출하기 전에 파일을 쓰기 가능한 디렉터리에 복사하려면 코드를 배치합니다. 다음 코드는 아직 없는 경우에만 data.sqlite라는 기존 데이터베이스를 복사합니다.

// Copy the database across (if it doesn't exist)
var appdir = NSBundle.MainBundle.ResourcePath;
var seedFile = Path.Combine (appdir, "data.sqlite");
if (!File.Exists (Database.DatabaseFilePath))
{
  File.Copy (seedFile, Database.DatabaseFilePath);
}

이 작업이 완료된 후 실행되는 모든 데이터 액세스 코드(ADO.NET 또는 SQLite.NET 사용)는 미리 채워진 데이터에 액세스할 수 있습니다.