Skip to content

Latest commit

 

History

History
192 lines (147 loc) · 21.6 KB

README.md

File metadata and controls

192 lines (147 loc) · 21.6 KB

build CodeQL NuGet Nuget .NET code metrics Discord

All Contributors

Azure Cosmos DB Repository .NET SDK

This package wraps the NuGet: Microsoft.Azure.Cosmos package, exposing a simple dependency-injection enabled IRepository<T> interface.

Documentation

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

Cosmos Repository

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:

[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):

[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

Getting started

  1. Create an Azure Cosmos DB SQL resource.

  2. 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.

  3. Call AddCosmosRepository:

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

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

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCosmosRepository(
            options =>
            {
                options.CosmosConnectionString = "< connection string >";
                options.ContainerId = "data-store";
                options.DatabaseId = "samples";
            });
    }
  4. Define your object graph, objects must inherit Item, for example:

    using Microsoft.Azure.CosmosRepository;
    
    public class Person : Item
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
  5. Ask for an instance of IRepository<TItem>, in this case the TItem is Person:

    using Microsoft.Azure.CosmosRepository;
    
    public class Consumer
    {
        readonly IRepository<Person> _repository;
    
        public Consumer(IRepository<Person> repository) =>
            _repository = repository;
    
        // Use the repo...
    }
  6. Perform any of the operations on the _repository instance, create Person records, update them, read them, or delete.

  7. Enjoy!

Samples

Visit the Microsoft.Azure.CosmosRepository.Samples directory for samples on how to use the library with:

Deep-dive video

A deep dive into the Azure Cosmos DB repository pattern NET SDK

Cosmos Repository Crash Course

Discord

Get extra support on our dedicated Discord channel.

alt Join the conversation

Contributors ✨

Thanks goes to these wonderful people (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 specification. Contributions of any kind welcome!