Table of Contents

EfCoreAggregateRepository<TEntity, TKey, TMarker> Class

Definition

Namespace
Savvyio.Extensions.DependencyInjection.EFCore.Domain
Assemblies
Savvyio.Extensions.DependencyInjection.EFCore.Domain.dll
Source
src/Savvyio.Extensions.DependencyInjection.EFCore.Domain/EfCoreAggregateRepository.cs

Provides an implementation of the EfCoreRepository<TEntity, TKey> that is optimized for Domain Driven Design.

public class EfCoreAggregateRepository<TEntity, TKey, TMarker> : EfCoreRepository<TEntity, TKey>, IAggregateRepository<TEntity, TKey, TMarker>, IAggregateRepository<TEntity, TKey>, IPersistentRepository<TEntity, TKey, TMarker>, IPersistentRepository<TEntity, TKey>, IWritableRepository<TEntity, TKey, TMarker>, IWritableRepository<TEntity, TKey>, IReadableRepository<TEntity, TKey, TMarker>, IReadableRepository<TEntity, TKey>, ISearchableRepository<TEntity, TKey, TMarker>, ISearchableRepository<TEntity, TKey>, IDeletableRepository<TEntity, TKey, TMarker>, IRepository<TEntity, TKey, TMarker>, IDependencyInjectionMarker<TMarker>, IDeletableRepository<TEntity, TKey>, IRepository<TEntity, TKey> where TEntity : class, IAggregateRoot<IDomainEvent, TKey>

Type Parameters

TEntity

The type of the entity.

TKey

The type of the key that uniquely identifies the entity.

TMarker

The type used to mark the implementation that this repository represents. Optimized for Microsoft Dependency Injection.

Inheritance
object
EfCoreRepository<TEntity, TKey>
EfCoreAggregateRepository<TEntity, TKey, TMarker>
Implements
IAggregateRepository<TEntity, TKey, TMarker>
IAggregateRepository<TEntity, TKey>
IPersistentRepository<TEntity, TKey, TMarker>
IPersistentRepository<TEntity, TKey>
IWritableRepository<TEntity, TKey, TMarker>
IWritableRepository<TEntity, TKey>
IReadableRepository<TEntity, TKey, TMarker>
IReadableRepository<TEntity, TKey>
ISearchableRepository<TEntity, TKey, TMarker>
ISearchableRepository<TEntity, TKey>
IDeletableRepository<TEntity, TKey, TMarker>
IRepository<TEntity, TKey, TMarker>
IDeletableRepository<TEntity, TKey>
IRepository<TEntity, TKey>
Inherited Members

Examples

The DI-registered EfCoreAggregateRepository<TAggregateRoot, TKey, TContext> resolves as IAggregateRepository<TAggregateRoot, TKey> when registered via AddEfCoreAggregateRepository. The aggregate data source registered by AddEfCoreAggregateDataSource provides the context. The example registers both services and resolves the repository interface.

using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Savvyio.Domain;
using Savvyio.Extensions.DependencyInjection.Domain;
using Savvyio.Extensions.DependencyInjection.EFCore;
using Savvyio.Extensions.DependencyInjection.EFCore.Domain;

namespace ExampleApp;

public sealed class MarkerAggregateRepositoryExample
{
    public bool IsResolvedAsMarkedAggregateRepository()
    {
        var services = new ServiceCollection();
        services.AddEfCoreDataSource<OrderingMarker>(options =>
        {
            options.ContextConfigurator = builder => builder.EnableDetailedErrors();
            options.ModelConstructor = modelBuilder => modelBuilder.Entity<OrderAggregate>().HasKey(order => order.Id);
        });
        services.AddEfCoreAggregateRepository<OrderAggregate, Guid, OrderingMarker>();

        using var provider = services.BuildServiceProvider();
        var repository = provider.GetRequiredService<IAggregateRepository<OrderAggregate, Guid, OrderingMarker>>();

        return repository is EfCoreAggregateRepository<OrderAggregate, Guid, OrderingMarker>;
    }
}

public sealed class OrderingMarker
{
}

public sealed class OrderAggregate : Aggregate<Guid, IDomainEvent>, IAggregateRoot<IDomainEvent, Guid>
{
    public OrderAggregate(Guid id) : base(id)
    {
    }
}

Constructors

Name Description
EfCoreAggregateRepository(IEfCoreDataSource<TMarker>)

Initializes a new instance of the EfCoreRepository<TEntity, TKey, TMarker> class.

See Also

EfCoreRepository<TEntity, TKey>
IPersistentRepository<TEntity, TKey, TMarker>