EF-Repository-Pattern 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package EF-Repository-Pattern --version 1.0.0
                    
NuGet\Install-Package EF-Repository-Pattern -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EF-Repository-Pattern" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EF-Repository-Pattern" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="EF-Repository-Pattern" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EF-Repository-Pattern --version 1.0.0
                    
#r "nuget: EF-Repository-Pattern, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package EF-Repository-Pattern@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=EF-Repository-Pattern&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=EF-Repository-Pattern&version=1.0.0
                    
Install as a Cake Tool

EF Core 5 - Generic Repository Pattern

Simple Generic Repository Pattern based on EF core 5 and Dependency Injection. To create any type of Repository based on the Context's DBSets.

How to use

In Sturtup after calling AddDbContext<TContext> you can call AddEFRepositoryPattern<TContext>()

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<MyContext>(options =>
    {
        options.UseInMemoryDatabase(databaseName: $"Select");
    });

    services.AddEFRepositoryPattern<MyContext>();

    ...
}

public class MyContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }
    public DbSet<Order> Orders { get; set; }
}

That's all, now you can use all reporitory you want only doing this

public class MyService {
    private readonly IRepositoryManager<MyContext> repositoryManager;

    public MyService(IRepositoryManager<MyContext> repositoryManager)
    {
        this.repositoryManager = repositoryManager;
    }

    public async Task AddSaveChanges()
    {
        // Create your Repository of Type Customer
        var repCustomer = repositoryManager.GenerateModelRepository<Customer>();
        var bCustomer = new Customer() { Id = 1, City = "New York", FirstName = "Liam" };

        // Adding some customers to DBSet
        await repCustomer.AddModelAsync(bCustomer);
        await repCustomer.AddModelAsync(new Customer() { Id = 2, City = "San Diego", FirstName = "Liam" });
        await repCustomer.AddModelAsync(new Customer() { Id = 3, City = "Los Angeles" });
        await repCustomer.AddModelAsync(new Customer() { Id = 5, City = "New York", FirstName = "Noah" });
        await repCustomer.AddModelAsync(new Customer() { Id = 4, City = "Dallas" });

        // Create your Repository of Type Order
        var repOrder = repositoryManager.GenerateModelRepository<Order>();

        // Adding some customers to DBSet
        await repOrder.AddModelAsync(new Order() { Id = 1, TotalAmount= 100, Customer = bCustomer });
        await repOrder.AddModelAsync(new Order() { Id = 2, TotalAmount= 22, Customer = bCustomer });
        await repOrder.AddModelAsync(new Order() { Id = 3, TotalAmount= 67, Customer = bCustomer });

        // Save all in DB
        await repositoryManager.SaveChangesAsync();
    }

    public async Task Get()
    {
        // Create your Repository of Type Customer
        var repCustomer = repositoryManager.GenerateModelRepository<Customer>();

        // Get First Customer where City == "New York"
        var b = await repCustomer.GetFirstModelAsync(x => x.City == "New York");

        // Get List of Customers where FirstName == Liam orderedBy City and include Orders
        var c = await repCustomer.GetListModelsAsync(
            x => x.FirstName == "Liam",
            x => x.OrderBy(y => y.City),
            x => x.Include(y => y.Orders)
        );

        // Get AllList of Customers Order by City and FirstName
        var d = await repCustomer.GetListModelsAsync(
            orderByFunc: x => x.OrderBy(y => y.City).ThenBy(y => y.FirstName)
        );
    }
}

Support

Any help is welcome. Bug insertion, new methods to implement, code improvement... And don't forget, if you want to support me

https://www.buymeacoffee.com/DenMic

Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.3 654 3/2/2022
1.2.2 595 3/2/2022
1.2.1 429 1/9/2022
1.2.0 449 1/9/2022
1.1.0 587 10/9/2021
1.0.1 498 10/7/2021
1.0.0 535 10/3/2021