From e3bc2f60310e6ee6f7da3c9ecd659cce6fcef7db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sat, 14 Apr 2018 15:47:40 +0300 Subject: [PATCH] Added WithDetails to repository that getting a list of selectors. --- .../Domain/Repositories/IReadOnlyRepository.cs | 8 ++++++-- .../Abp/Domain/Repositories/RepositoryBase.cs | 5 +++++ .../EntityFrameworkCore/EfCoreRepository.cs | 15 +++++++++++++++ .../TestApp/Testing/Repository_Queryable_Tests.cs | 11 +++++++++++ 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs b/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs index dbabd1b970..c0956ac892 100644 --- a/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs +++ b/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs @@ -1,11 +1,15 @@ -using System.Linq; +using System; +using System.Linq; +using System.Linq.Expressions; using Volo.Abp.Domain.Entities; namespace Volo.Abp.Domain.Repositories { - public interface IReadOnlyRepository : IQueryable + public interface IReadOnlyRepository : IQueryable { IQueryable WithDetails(); + + IQueryable WithDetails(params Expression>[] propertySelectors); } public interface IReadOnlyRepository : IReadOnlyRepository, IReadOnlyBasicRepository diff --git a/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs b/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs index fe23d3b582..139f4ff999 100644 --- a/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs +++ b/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs @@ -29,6 +29,11 @@ namespace Volo.Abp.Domain.Repositories return GetQueryable(); } + public virtual IQueryable WithDetails(params Expression>[] propertySelectors) + { + return GetQueryable(); + } + IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); diff --git a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 0b2b43f5eb..b28cee8f8e 100644 --- a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -168,6 +168,21 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore return EntityOptions.DefaultWithDetailsFunc(GetQueryable()); } + + public override IQueryable WithDetails(params Expression>[] propertySelectors) + { + var query = GetQueryable(); + + if (!propertySelectors.IsNullOrEmpty()) + { + foreach (var propertySelector in propertySelectors) + { + query = query.Include(propertySelector); + } + } + + return query; + } } public class EfCoreRepository : EfCoreRepository, diff --git a/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs b/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs index da341d4885..b7436f7bc5 100644 --- a/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs +++ b/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs @@ -48,5 +48,16 @@ namespace Volo.Abp.TestApp.Testing person.Phones.Count.ShouldBe(2); }); } + + [Fact] + public void WithDetails_Explicit() + { + WithUnitOfWork(() => + { + var person = PersonRepository.WithDetails(p => p.Phones).Single(p => p.Id == TestDataBuilder.UserDouglasId); + person.Name.ShouldBe("Douglas"); + person.Phones.Count.ShouldBe(2); + }); + } } }