퀵 스타트 - .NET SDK
이 페이지의 내용
이 빠른 시작에서는 Realm .NET SDK 와 함께 Realm 을 사용하는 방법을 보여줍니다. 그런 다음 Atlas App Services 를 사용하여 Device Sync 를 앱 에 추가하는 방법을 보여 줍니다. 시작하기 전에 .NET SDK 를 설치했는지 확인합니다.
Realm 설치하기
다음 단계에 따라 프로젝트에 .NET SDK를 추가하세요.
중요
모든 프로젝트에 SDK 설치
멀티플랫폼 솔루션을 사용하는 경우, 해당 프로젝트에 SDK 관련 코드가 포함되어 있지 않더라도 모든 플랫폼 프로젝트에 대해 SDK를 설치해야 합니다.
FodyWeavers.xml에 Realm Weaver를 추가합니다.
참고
Fody 를 아직 사용 하지 않은 경우 이 단계를 건너뛸 수 있습니다. . Visual Studio는 처음 빌드 할 때 올바르게 구성된 FodyWeavers.xml
파일 을 생성합니다.
프로젝트에서 이미 Fody 를 사용 중인 경우 파일에 Realm Weaver를 수동으로 추가해야 FodyWeavers.xml
합니다. 완료되면 FodyWeavers.xml
파일은 다음과 같이 표시됩니다.
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> <Realm /> </Weavers>
Realm 가져오기
Realm을 사용하려면 소스 파일 상단에 다음 줄을 추가하세요.
using Realms;
객체 모델 정의
애플리케이션의 객체 모델 은 Realm 내에 저장하고 Atlas App Services와 동기화할 수 있는 데이터를 정의합니다.
중요
상속
모든 Realm 객체는 IRealmObject, IEmbeddedObject 또는 IAsymmetricObject 인터페이스에서 상속되며 partial
클래스로 선언되어야 합니다.
10.18.0 이전의 .NET SDK 버전에서는 객체는 RealmObject, EmbeddedObject 또는 AsymmetricObject 기본 클래스에서 파생됩니다. Realm 모델 정의에 대한 이 접근 방식은 계속 지원되지만 null 허용 여부 주석 과 같은 새로운 기능은 포함되지 않습니다. 향후 SDK 릴리스에서는 기본 클래스가 더 이상 사용되지 않습니다. 새로 작성하는 모든 클래스에 인터페이스를 사용해야 하며 기존 클래스의 마이그레이션을 고려해야 합니다.
다음 코드는 Item
객체에 대한 객체 모델을 정의하는 방법을 보여줍니다. 이 예제에서는 Id
필드를 프라이머리 키로 표시하고 Status
속성을 선택 사항으로 표시했습니다. 또한 MapTo
속성을 사용하기로 결정했습니다. 속성은 서버에서 소문자로 저장되지만 Device Sync를 사용할 때 속성 이름에 .NET에 친숙한 대/소문자를 사용할 수 있습니다.
public partial class Item : IRealmObject { [ ] [ ] public ObjectId Id { get; set; } = ObjectId.GenerateNewId(); [ ] public string Assignee { get; set; } [ ] public string? Name { get; set; } [ ] public string? Status { get; set; } }
로컬 Realm 열기
로컬 전용 Realm에서는 Realm.GetInstance() 또는 Realm.GetInstanceAsync() 메서드를 사용하여 Realm을 엽니다. 어떤 방법을 사용할지는 전적으로 비동기 패턴 을 사용하는지 여부와 방법에 따라 달라집니다. 추가합니다. 다음 코드는 GetInstance()
사용 방법을 보여줍니다.
var realm = Realm.GetInstance();
자세한 내용 은 Realm 열기를 참조하세요.
객체 만들기, 읽기, 업데이트 및 삭제
문서를 만들거나 업데이트할 때 모든 쓰기는 트랜잭션에서 발생해야 합니다.
다음 코드는 새 Realm 객체를 생성하는 두 가지 방법을 보여줍니다. 첫 번째 예제에서는 먼저 객체를 만든 다음 WriteAsync() 메서드 내에서 영역에 추가합니다. 두 번째 예에서는 WriteAsync
블록 내에 문서를 생성하고, 이 블록은 추가 작업을 할 수 있는 Realm 객체를 반환합니다.
var testItem = new Item { Name = "Do this thing", Status = ItemStatus.Open.ToString(), Assignee = "Aimee" }; await realm.WriteAsync(() => { realm.Add(testItem); }); // Or var testItem2 = await realm.WriteAsync(() => { return realm.Add<Item>(new Item { Name = "Do this thing, too", Status = ItemStatus.InProgress.ToString(), Assignee = "Satya" }); } );
문서를 업서트하는 것은 선택적 update
매개변수를 true
로 설정한다는 점을 제외하면 새 문서를 만드는 것과 동일합니다. 이 예에서는 고유한 Id
을(를) 가진 새 Item
객체를 만듭니다. 그런 다음 ID는 같지만 Name
값이 다른 항목을 삽입합니다. update
매개 변수를 true
로 설정했기 때문에 기존 레코드가 새 이름으로 업데이트됩니다.
var id = ObjectId.GenerateNewId(); var item1 = new Item { Id = id, Name = "Defibrillate the Master Oscillator", Assignee = "Aimee" }; // Add a new person to the realm. Since nobody with the existing Id // has been added yet, this person is added. await realm.WriteAsync(() => { realm.Add(item1, update: true); }); var item2 = new Item { Id = id, Name = "Fluxify the Turbo Encabulator", Assignee = "Aimee" }; // Based on the unique Id field, we have an existing person, // but with a different name. When `update` is true, you overwrite // the original entry. await realm.WriteAsync(() => { realm.Add(item2, update: true); }); // item1 now has a Name of "Fluxify the Turbo Encabulator" // and item2 was not added as a new Item in the collection.
WriteAsync()
메서드 내에서 항목을 삭제할 수도 있습니다. 다음 코드는 컬렉션에서 단일 Item
를 삭제하는 방법과 전체 컬렉션을 삭제하는 방법을 보여줍니다.
realm.Write(() => { realm.Remove(myItem); }); realm.Write(() => { realm.RemoveAll<Item>(); });
다음 페이지에서는 이러한 각 주제에 대해 자세히 설명합니다.
문서 찾기, 필터링 및 정렬
Atlas Search는 Realm 쿼리 엔진으로 LINQ 또는 RQL(RQL)을 사용하여 문서를 검색합니다. 다음 예제에서는 'Item' 유형의 모든 객체를 찾습니다.
var allItems = realm.All<Item>();
LINQ 또는 RQL을 사용하여 결과를 필터링합니다. 이 예제에서는 LINQ를 사용하여 상태가 "Open"인 모든 항목을 찾습니다.
var openItems = realm.All<Item>() .Where(i => i.Status == "Open");
LINQ 또는 RQL을 사용하여 결과를 정렬할 수도 있습니다.
var sortedItems = realm.All<Item>() .OrderBy(i => i.Status);
문서 쿼리, 필터링 및 정렬에 대한 자세한 내용은 데이터 필터링 및 정렬 - .NET SDK 를 참조하세요.
변화를 주시하세요
문서 컬렉션이 변경되면 클라이언트 앱 에서 데이터를 업데이트하는 것이 중요한 경우가 많습니다. SubscribeForNotifications() 메서드를 사용 하여 영역, 컬렉션 또는 객체 의 변경 사항을 감시 할 수 있습니다.
다음 예제에서는 전체 Realm 컬렉션에 알림 핸들러를 추가하는 방법을 보여줍니다.
// Observe realm notifications. realm.RealmChanged += (sender, eventArgs) => { // The "sender" object is the realm that has changed. // "eventArgs" is reserved for future use. // ... update UI ... };
컬렉션 및 개별 객체에 알림 핸들러를 추가할 수도 있습니다. 자세한 내용 은 변경 사항에React 하기를 참조하세요.
Device Sync 추가(선택 사항)
여러 기기에서 Realm 데이터를 동기화하려면 Atlas App Services를 구성하고 Device Sync 를 활성화하면 됩니다. 이 작업을 수행한 후 클라이언트 코드에 동기화를 추가합니다.
전제 조건
Realm 데이터를 동기화하려면 먼저 다음을 수행해야 합니다.
다음 코드에서는 익명 인증을 활성화했으며 Flexible Sync 구성의 고유 필드로 ownerId
를 사용하고 있습니다.
앱 초기화
인증 및 동기화와 같은 App Services 기능을 사용하려면 앱 ID를 사용하여 App Services 앱에 액세스합니다. App Services UI에서 앱 ID 찾기를 수행할 수 있습니다.
그런 다음 앱을 초기화합니다.
app = App.Create(myRealmAppId);
동기화와 함께 객체 모델 사용
동기화 를 사용할 때 Atlas App Services UI에서 개발 모드 와 동기화를 허용한 경우에만 코드에서 객체 모델을 직접 정의할 수 있습니다.
참고
개발 모드가 비활성화된 경우 UI에서 스키마 가져오기
동기화를 활성화했지만 개발 모드를 끈 경우, Atlas App Services UI의 SDKs 탭에서 Atlas App Services가 생성한 객체 모델 정의를 복사하여 붙여넣을 수 있습니다. 클라이언트 사이드 코드에서 객체 모델 정의를 변경하려면 개발 모드를 다시 활성화해야 합니다.
자세한 내용 은 데이터 모델 생성을 참조하세요.
사용자 인증
이 빠른 시작에서는 익명 인증 을 사용하여 사용자에게 식별 정보를 제공하지 않고도 로그인할 수 있습니다. 사용자를 인증한 후 해당 사용자에 대한 Realm을 열 수 있습니다.
var user = await app.LogInAsync(Credentials.Anonymous());
사용자가 로그아웃할 수 있는 방법도 제공해야 합니다. 다음 코드는 LogOutAsync()
을(를) 호출하여 이 작업을 수행하는 방법을 보여줍니다.
await user.LogOutAsync();
Realm .NET SDK는 사용자를 인증, 등록, 연결할 수 있는 다양한 방법을 추가로 제공합니다. 다른 인증 제공자에 대해서는 사용자 인증 - .NET SDK를 참조하세요.
동기화된 Realm 열기
Device Sync를 활성화 하고 사용자를 인증하면 동기화된 Realm 을 열 수 있습니다. FlexibleSyncConfiguration
객체를 사용하여 애플리케이션이 데이터를 Atlas App Services와 동기화하는 방법에 대한 세부 사항을 제어합니다. 그런 다음 사용자가 쿼리할 수 있는 데이터를 결정하는 Flexible Sync 구독 을 추가합니다.
var config = new FlexibleSyncConfiguration(app.CurrentUser) { PopulateInitialSubscriptions = (realm) => { var myItems = realm.All<Item>().Where(n => n.OwnerId == myUserId); realm.Subscriptions.Add(myItems); } }; // The process will complete when all the user's items have been downloaded. var realm = await Realm.GetInstanceAsync(config);
동기화된 Realm에서 알림을 읽고, 쓰고, 감시하는 구문은 위의 동기화되지 않은 Realm의 구문과 동일합니다. 로컬 데이터로 작업하는 동안 백그라운드 스레드는 변경 세트를 효율적으로 통합, 업로드 및 다운로드합니다.
동기화가 활성화된 App Services App 을 만드는 방법에 대한 자세한 내용은 .NET 튜토리얼을 참조하세요.
클라이언트 코드에서 동기화를 구현하는 방법에 대한 자세한 내용 은 앱에 Device Sync 추가를 참조하세요.