# Introduction

ObjectRepository provides a simple and type-safe API for storing and retrieving Dart objects in a Nitrite database. It is built on top of NitriteCollection and provides a similar API for CRUD operations. It also supports indexing and querying. It also supports event based notification on object changes.

# Creating a Repository

An ObjectRepository can be created using Nitrite class. You need to call getRepository() method on Nitrite class to get an instance of an ObjectRepository. If the repository does not exist, then it will be created automatically. If a repository with the same name already exists, then it will return the existing repository.

There are several options available to create a repository. You can pass a class type or an EntityDecorator along with an optional string key to create a repository.

# Creating a Repository with Class Type

You can create a ObjectRepository by passing a class type to getRepository() method.

ObjectRepository<Employee> repository = await db.getRepository<Employee>();

# Creating a Repository with Class Type and Key

You can create a keyed ObjectRepository by passing a class type and a key to getRepository() method.

ObjectRepository<Employee> repository = await db.getRepository<Employee>(key: "myKey");

One typical use case of this keyed repository is to create a repository for each user in a multi-user application. The key can be the user name or user id. This will ensure that each user will have a separate repository for storing objects.

# Creating a Repository with EntityDecorator

A ObjectRepository can be created using EntityDecorator. This is useful when you cannot modify the object class to add annotations.

More details about EntityDecorator can be found here.

ObjectRepository<Employee> repository = await db.getRepository<Employee>(entityDecorator: EmployeeDecorator());

# Creating a Repository with EntityDecorator and Key

A keyed ObjectRepository can be created using EntityDecorator and a key. This is useful when you cannot modify the object class to add annotations.

More details about EntityDecorator can be found here.

ObjectRepository<Employee> repository = await db.getRepository<Employee>(entityDecorator: EmployeeDecorator(), key: "myKey");