Giter Club home page Giter Club logo

Comments (4)

fiseni avatar fiseni commented on July 27, 2024 1

Hi @datnt97,

I think you're missing the methods that return TResult in your repository implementation. Here is the built-in implementation.

from specification.

fiseni avatar fiseni commented on July 27, 2024 1

Hey @datnt97

Here I created a full sample app for you. We're confident it works properly, it's battle-tested on production for a long time. Perhaps you should cross-check everything on your side once again. This is the generated SQL statement for the app.

SELECT [c].[Id], [c].[FirstName]
FROM [Customers] AS [c]
using Ardalis.Specification;
using Ardalis.Specification.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;

await AppDbContext.SeedAsync();

using var dbContext = new AppDbContext();
var repo = new Repository<Customer>(dbContext);
var spec = new CustomerDtoSpec();

var result = await repo.ListAsync(spec);
Console.WriteLine(result.Count);

public interface IRepository<T> : IRepositoryBase<T> where T : class { }
public class Repository<T> : RepositoryBase<T> where T : class 
{
    public Repository(AppDbContext dbContext)
        : base(dbContext) { }
}

public class CustomerDtoSpec : Specification<Customer, CustomerDto>
{
    public CustomerDtoSpec()
    {
        Query.Select(x => new CustomerDto
        {
            Id = x.Id,
            FirstName = x.FirstName
        });
    }
}
public class CustomerDto
{
    public int Id { get; set; }
    public string? FirstName { get; set; }
}
public class Customer
{
    public int Id { get; set; }
    public string? FirstName { get; set; }
    public string? LastName { get; set; }
}
public class AppDbContext : DbContext
{
    public DbSet<Customer> Customers => Set<Customer>();
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var connectionString = "Data Source=(localdb)\\MSSQLLocalDb;Initial Catalog=SpecificationSelectDemo;Integrated Security=SSPI;Trusted_Connection=true";
        optionsBuilder.UseSqlServer(connectionString).LogTo(Console.WriteLine);
    }

    public static async Task SeedAsync()
    {
        using var dbContext = new AppDbContext();
        var customers = new List<Customer>()
        {
            new() { FirstName = "Customer1", LastName = "Customer1" },
            new() { FirstName = "Customer2", LastName = "Customer2" },
            new() { FirstName = "Customer3", LastName = "Customer3" },
        };
        await dbContext.Database.EnsureCreatedAsync();
        dbContext.AddRange(customers);
        await dbContext.SaveChangesAsync();
    }
}

from specification.

datnt97 avatar datnt97 commented on July 27, 2024

I tried it. But it seems like it's not working as expected as well. Am I doing something wrong here?

image

from specification.

datnt97 avatar datnt97 commented on July 27, 2024

Thank you for your greatest help!

from specification.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.