Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ievangelist/azure-cosmos-dotnet-repository

Wraps the .NET SDK for Azure Cosmos DB abstracting away the complexity, exposing a simple CRUD-based repository pattern
https://github.com/ievangelist/azure-cosmos-dotnet-repository

azure-cosmos-db crud dotnet hacktoberfest repository-pattern sdk

Last synced: 4 days ago
JSON representation

Wraps the .NET SDK for Azure Cosmos DB abstracting away the complexity, exposing a simple CRUD-based repository pattern

Awesome Lists containing this project

README

        

![build](https://github.com/IEvangelist/azure-cosmos-dotnet-repository/workflows/build/badge.svg) ![CodeQL](https://github.com/IEvangelist/azure-cosmos-dotnet-repository/workflows/CodeQL/badge.svg) [![NuGet](https://img.shields.io/nuget/v/IEvangelist.Azure.CosmosRepository.svg?style=flat&label=NuGet%20version)](https://www.nuget.org/packages/IEvangelist.Azure.CosmosRepository) ![Nuget](https://img.shields.io/nuget/dt/IEvangelist.Azure.CosmosRepository?color=blue&label=NuGet%20downloads&logo=nuget) [![.NET code metrics](https://github.com/IEvangelist/azure-cosmos-dotnet-repository/actions/workflows/code-metrics.yml/badge.svg)](https://github.com/IEvangelist/azure-cosmos-dotnet-repository/actions/workflows/code-metrics.yml) [![Discord](https://img.shields.io/discord/868239483529723914.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.com/invite/qMXrX4shAv)


[![All Contributors](https://img.shields.io/badge/all_contributors-35-orange.svg?style=flat-square)](#contributors-)

# Azure Cosmos DB Repository .NET SDK

This package wraps the [NuGet: Microsoft.Azure.Cosmos package](https://www.nuget.org/packages/Microsoft.Azure.Cosmos),
exposing a simple dependency-injection enabled `IRepository` interface.

## Documentation

The core library `IEvangelist.Azure.CosmosRepository` and `IEvangelist.Azure.CosmosEventSourcing` both host there own documentation site. See below:

* [`IEvangelist.Azure.CosmosRepository Documentation`](https://ievangelist.github.io/azure-cosmos-dotnet-repository/1-getting-started/)
* [`IEvangelist.Azure.CosmosEventSourcing Documentation`](https://mumby0168.github.io/cosmos-event-sourcing-docs/)

![Cosmos Repository](CosmosRepository.png)

The repository is responsible for all of the create, read, update, and delete (CRUD) operations on objects `where T : Item`. The `Item` type adds
several properties, one which is a globally unique identifier defined as:

```csharp
[JsonProperty("id")]
public string Id { get; set; } = Guid.NewGuid().ToString();
```

Additionally, a type property exists which indicates the subclass name (this is used for filtering implicitly on your behalf):

```csharp
[JsonProperty("type")]
public string Type { get; set; }
```

Finally, a partition key property is used internally to manage partitioning on your behalf. This can optionally be overridden on an item per item basis.

📣 [Azure Cosmos DB - Official Blog](https://devblogs.microsoft.com/cosmosdb/azure-cosmos-db-repository-net-sdk-v-1-0-4)

## Getting started

1. Create an Azure Cosmos DB SQL resource.
1. Obtain the resource connection string from the **Keys** blade, be sure to get a connection string and not the key - these are different. The connection string is a compound key and endpoint URL.
1. Call `AddCosmosRepository`:

```csharp
public void ConfigureServices(IServiceCollection services)
{
services.AddCosmosRepository();
}
```

The optional `setupAction` allows consumers to manually configure the `RepositoryOptions` object:

```csharp
public void ConfigureServices(IServiceCollection services)
{
services.AddCosmosRepository(
options =>
{
options.CosmosConnectionString = "< connection string >";
options.ContainerId = "data-store";
options.DatabaseId = "samples";
});
}
```

1. Define your object graph, objects must inherit `Item`, for example:

```csharp
using Microsoft.Azure.CosmosRepository;

public class Person : Item
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
```

1. Ask for an instance of `IRepository`, in this case the `TItem` is `Person`:

```csharp
using Microsoft.Azure.CosmosRepository;

public class Consumer
{
readonly IRepository _repository;

public Consumer(IRepository repository) =>
_repository = repository;

// Use the repo...
}
```

1. Perform any of the operations on the `_repository` instance, create `Person` records, update them, read them, or delete.
1. Enjoy!

## Samples

Visit the `Microsoft.Azure.CosmosRepository.Samples` [directory](https://github.com/IEvangelist/azure-cosmos-dotnet-repository/tree/main/samples) for samples on how to use the library with:

- [Azure Functions](https://github.com/IEvangelist/azure-cosmos-dotnet-repository/tree/main/samples/Microsoft.Azure.CosmosRepository/AzureFunctionTier)
- [Services](https://github.com/IEvangelist/azure-cosmos-dotnet-repository/tree/main/samples/Microsoft.Azure.CosmosRepository/ServiceTier)
- [Controllers (web apps)](https://github.com/IEvangelist/azure-cosmos-dotnet-repository/tree/main/samples/Microsoft.Azure.CosmosRepository/WebTier)
- [Paging](https://github.com/IEvangelist/azure-cosmos-dotnet-repository/tree/main/samples/Microsoft.Azure.CosmosRepository/Paging)

## Deep-dive video

[![A deep dive into the Azure Cosmos DB repository pattern NET SDK](images/deep-dive-talk.png)](https://www.youtube.com/watch?v=izdnmBrTweA)

[![Cosmos Repository Crash Course](images/dotnet-docs-show.jpeg)](https://www.youtube.com/watch?v=_rsVwc4n8Ps)

## Discord

Get extra support on our dedicated Discord channel.

[![alt Join the conversation](https://img.shields.io/discord/868239483529723914.svg "Discord")](https://discord.com/invite/qMXrX4shAv)

## Contributors ✨

Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):



David Pine
David Pine

💻 ⚠️ 💡 👀
Invvard
Invvard

⚠️ 💻
Richard Mercer
Richard Mercer

💻
Daniel Marbach
Daniel Marbach

💻
Manuel Sidler
Manuel Sidler

💻
Dave Brock
Dave Brock

📖 💻
Cagdas Erman Afacan
Cagdas Erman Afacan

💻 💡


dcuccia
dcuccia

💻
VeryCautious
VeryCautious

💻 ⚠️
Billy Mumby
Billy Mumby

💻 📖 🤔
Michael Zhang
Michael Zhang

🤔 💻
Shay Rojansky
Shay Rojansky

👀
Junior Macedo
Junior Macedo

💻 🤔
Emre KARA
Emre KARA

💻


Brad Westness
Brad Westness

👀
Matt Stannett
Matt Stannett

💻 📖 ⚠️
mustafarabie
mustafarabie

💻 ⚠️
Robert Bennett
Robert Bennett

⚠️ 💻
Rabosa616
Rabosa616

💻 ⚠️ 📖
Adam Storr
Adam Storr

💻 ⚠️
Kevin Benton
Kevin Benton

💻 ⚠️


Filip Persson
Filip Persson

💻 ⚠️
A.F.M. Noorullah
A.F.M. Noorullah

📖
Ion Dormenco
Ion Dormenco

💻
Martin Oehlert
Martin Oehlert

💻
Evan Johnson
Evan Johnson

💻 ⚠️
Phil Reed
Phil Reed

⚠️ 💻 📖
dnitsch
dnitsch

🤔


Sean Farrow
Sean Farrow

🤔
stormbringer766
stormbringer766

💻 ⚠️
Joel Turner
Joel Turner

💻
Ross
Ross

🐛
John Belcher
John Belcher

📖
Victor Marante
Victor Marante

💻
Mateusz Kumpf
Mateusz Kumpf

💻 ⚠️

This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!