Skip to content

Commit d5a0466

Browse files
authored
Meta member matching (#56)
* Refactoring data source finding into static scope with sub-objects * Start of meta members * Support for Has<MemberName> meta-members based on non-null source member * Extending Has<MemberName> test coverage * Support for Has<MemberName> meta-members for array members * Support for Has<MemberName> with ICollection members * Updating IQualfiedMember.GetQualifiedAccess() to only require a parent instance Expression / Enabling source member meta member part chaining * Support for Has<MemberName> for IEnumerable<T> members * Support for First<MemberName> meta members for IList<T> members * Support for First<MemberName> with a null array member * Support for First<MemberName> meta members for List<T> members * Support for First<MemberName> meta members for non-Array, non-List<T> members * Support for Last<MemberName> with arrays * Test coverage for Last<MemberName> with IEnumerable<T> * Support for converting simple-type First<MemberName> meta members * Handling Last<MemberName> members with incompatible element types / New perfomance test results * Support for mapping to a numeric Has<MemberName> meta member / Support for mapping bool to numerics * Handling unconvertible Has<MemberName> members * Handling non-simple Has<MemberName> members * Handling First<MemberName> and Last<MemberName> members with non-enumerable <MemberName> * Support for two-level <MemberName>Has<MemberName> meta member * Deferring creation of OMD when mapping multi-level meta members * Extra test coverage for <MemberName>Has<MemberName> tests * Extra test coverage * Support for combination meta members - Last<EnumerableName>Has<MemberName> * Extending test coverage * Support for Has<MemberName> with multi-word <MemberName> * Extending test coverage * Support for <MemberName>Count meta members * Filtering <MemberName>Count meta members to enumerables only * Support for non-int <MemberName>Count members * Handling non-numeric <MemberName>Count members * Support for NumberOf<MemberName> meta members * Correctly pluralising expected member names for First<>, Last<> and Count<> * Start of test coverage + support for projecting to meta members / Removing duplicate ToList calls in projections * Test coverage for projection to int Has<MemberName> meta member for an enumerable member * Test coverage for projecting to Has<MemberName> meta members with complex type members * Test coverage for projecting to a <MemberName>Count meta member * Test coverage and support for projecting to combination First<MemberName>Has<MemberName> meta members * Support for projecting to combination meta members / Excluding index accesses from projections * Filtering auto-ordering in First<> and Last<> meta-members to only complex type elements
1 parent db622ef commit d5a0466

File tree

71 files changed

+2375
-437
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+2375
-437
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
ManualCtorMapper 0.0087615
2+
AgileMapperCtorMapper 0.1518352
3+
AgileMapperCtorMapper APTC 0.1308449
4+
AutoMapperCtorMapper 0.1722529
5+
AutoMapperCtorMapper APTC 0.1555686
6+
ExpressMapperCtorMapper 0.2106907
7+
MapsterCtorMapper 0.0317099
8+
ValueInjecterCtorMapper 0.4422153
9+
10+
ManualComplexTypeMapper 1.5887812
11+
AgileMapperComplexTypeMapper 3.2970885
12+
AgileMapperComplexTypeMapper APTC 1.7700424
13+
AutoMapperComplexTypeMapper 7.9611124
14+
AutoMapperComplexTypeMapper APTC 6.3630436
15+
ExpressMapperComplexTypeMapper 103.5730621
16+
MapsterComplexTypeMapper 3.3343207
17+
ValueInjecterComplexTypeMapper 97.326627
18+
19+
ManualFlatteningMapper 0.0529891
20+
AgileMapperFlatteningMapper 0.342948
21+
AgileMapperFlatteningMapper APTC 0.1886011
22+
AutoMapperFlatteningMapper 0.389213
23+
AutoMapperFlatteningMapper APTC 0.2272552
24+
ExpressMapperFlatteningMapper 0.5244185
25+
MapsterFlatteningMapper 0.2183507
26+
ValueInjecterFlatteningMapper 12.0859827
27+
28+
ManualUnflatteningMapper 0.0509569
29+
AgileMapperUnflatteningMapper 0.3614369
30+
AgileMapperUnflatteningMapper APTC 0.1957388
31+
AutoMapperUnflatteningMapper 0.4436255
32+
AutoMapperUnflatteningMapper APTC 0.2288541
33+
ValueInjecterUnflatteningMapper 13.1661926
34+
35+
ManualDeepMapper 0.4808445
36+
AgileMapperDeepMapper 1.0817244
37+
AgileMapperDeepMapper APTC 0.4917853
38+
AutoMapperDeepMapper 0.9881461
39+
AutoMapperDeepMapper APTC 0.5422916
40+
ExpressMapperDeepMapper 94.1899105
41+
MapsterDeepMapper 0.7481262
42+
ValueInjecterDeepMapper 26.9477557
43+
44+
45+
46+
47+
48+

AgileMapper.UnitTests.Orms.Ef5/AgileMapper.UnitTests.Orms.Ef5.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@
109109
<Compile Include="WhenProjectingToComplexTypeMembers.cs" />
110110
<Compile Include="WhenProjectingToEnumerableMembers.cs" />
111111
<Compile Include="WhenProjectingToFlatTypes.cs" />
112+
<Compile Include="WhenProjectingToMetaMembers.cs" />
112113
<Compile Include="WhenValidatingProjections.cs" />
113114
<Compile Include="WhenViewingProjectionPlans.cs" />
114115
</ItemGroup>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace AgileObjects.AgileMapper.UnitTests.Orms.Ef5
2+
{
3+
using System.Threading.Tasks;
4+
using Infrastructure;
5+
using Xunit;
6+
7+
public class WhenProjectingToMetaMembers : WhenProjectingToMetaMembers<Ef5TestDbContext>
8+
{
9+
public WhenProjectingToMetaMembers(InMemoryEf5TestContext context)
10+
: base(context)
11+
{
12+
}
13+
14+
[Fact]
15+
public Task ShouldErrorProjectingToAHasCollectionMember() => RunShouldErrorProjectingToAHasCollectionMember();
16+
}
17+
}

AgileMapper.UnitTests.Orms.Ef6/AgileMapper.UnitTests.Orms.Ef6.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@
113113
<Compile Include="WhenProjectingToComplexTypeMembers.cs" />
114114
<Compile Include="WhenProjectingToEnumerableMembers.cs" />
115115
<Compile Include="WhenProjectingToFlatTypes.cs" />
116+
<Compile Include="WhenProjectingToMetaMembers.cs" />
116117
<Compile Include="WhenValidatingProjections.cs" />
117118
<Compile Include="WhenViewingProjectionPlans.cs" />
118119
</ItemGroup>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace AgileObjects.AgileMapper.UnitTests.Orms.Ef6
2+
{
3+
using System.Threading.Tasks;
4+
using Infrastructure;
5+
using Xunit;
6+
7+
public class WhenProjectingToMetaMembers : WhenProjectingToMetaMembers<Ef6TestDbContext>
8+
{
9+
public WhenProjectingToMetaMembers(InMemoryEf6TestContext context)
10+
: base(context)
11+
{
12+
}
13+
14+
[Fact]
15+
public Task ShouldProjectToAHasCollectionMember() => RunShouldProjectToAHasCollectionMember();
16+
}
17+
}

AgileMapper.UnitTests.Orms.EfCore1/AgileMapper.UnitTests.Orms.EfCore1.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@
244244
<Compile Include="WhenProjectingToComplexTypeMembers.cs" />
245245
<Compile Include="WhenProjectingToEnumerableMembers.cs" />
246246
<Compile Include="WhenProjectingToFlatTypes.cs" />
247+
<Compile Include="WhenProjectingToMetaMembers.cs" />
247248
<Compile Include="WhenValidatingProjections.cs" />
248249
<Compile Include="WhenViewingProjectionPlans.cs" />
249250
</ItemGroup>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace AgileObjects.AgileMapper.UnitTests.Orms.EfCore1
2+
{
3+
using System.Threading.Tasks;
4+
using Infrastructure;
5+
using Xunit;
6+
7+
public class WhenProjectingToMetaMembers : WhenProjectingToMetaMembers<EfCore1TestDbContext>
8+
{
9+
public WhenProjectingToMetaMembers(InMemoryEfCore1TestContext context)
10+
: base(context)
11+
{
12+
}
13+
14+
[Fact]
15+
public Task ShouldProjectToAHasCollectionMember() => RunShouldProjectToAHasCollectionMember();
16+
}
17+
}

AgileMapper.UnitTests.Orms.EfCore2/AgileMapper.UnitTests.Orms.EfCore2.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@
182182
<Compile Include="SimpleTypeConversion\WhenConvertingToInts.cs" />
183183
<Compile Include="SimpleTypeConversion\WhenConvertingToDateTimes.cs" />
184184
<Compile Include="SimpleTypeConversion\WhenConvertingToStrings.cs" />
185+
<Compile Include="WhenProjectingToMetaMembers.cs" />
185186
<Compile Include="WhenValidatingProjections.cs" />
186187
<Compile Include="WhenCreatingProjections.cs" />
187188
<Compile Include="WhenProjectingFlatTypes.cs" />
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace AgileObjects.AgileMapper.UnitTests.Orms.EfCore2
2+
{
3+
using System.Threading.Tasks;
4+
using Infrastructure;
5+
using Xunit;
6+
7+
public class WhenProjectingToMetaMembers : WhenProjectingToMetaMembers<EfCore2TestDbContext>
8+
{
9+
public WhenProjectingToMetaMembers(InMemoryEfCore2TestContext context)
10+
: base(context)
11+
{
12+
}
13+
14+
[Fact]
15+
public Task ShouldProjectToAHasCollectionMember() => RunShouldProjectToAHasCollectionMember();
16+
}
17+
}

AgileMapper.UnitTests.Orms/AgileMapper.UnitTests.Orms.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@
166166
<Compile Include="WhenProjectingToComplexTypeMembers.cs" />
167167
<Compile Include="WhenProjectingToEnumerableMembers.cs" />
168168
<Compile Include="WhenProjectingToFlatTypes.cs" />
169+
<Compile Include="WhenProjectingToMetaMembers.cs" />
169170
<Compile Include="WhenValidatingProjections.cs" />
170171
<Compile Include="WhenViewingProjectionPlans.cs" />
171172
</ItemGroup>

0 commit comments

Comments
 (0)