Skip to content

Commit d70bafc

Browse files
authored
Merge pull request #9 from BlaiseD/master
Fix for Issue #8 - Argument exception: Source and destination must have same number of arguments
2 parents 37ade6f + 262154d commit d70bafc

File tree

4 files changed

+46
-4
lines changed

4 files changed

+46
-4
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<Authors>Jimmy Bogard</Authors>
44
<LangVersion>latest</LangVersion>
5-
<VersionPrefix>1.0.2</VersionPrefix>
5+
<VersionPrefix>1.0.3</VersionPrefix>
66
<WarningsAsErrors>true</WarningsAsErrors>
77
<NoWarn>$(NoWarn);1701;1702;1591</NoWarn>
88
</PropertyGroup>

src/AutoMapper.Extensions.ExpressionMapping/MapperExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ void FindMaps(List<PropertyMap> maps)
290290
{
291291
foreach (PropertyMap pm in maps)
292292
{
293-
if (pm.SourceMember == null)
293+
if (!pm.SourceMembers.Any())
294294
continue;
295295

296296
AddChildMappings

src/AutoMapper.Extensions.ExpressionMapping/XpressionMapperVisitor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ protected void FindDestinationFullName(Type typeSource, Type typeDestination, st
326326
throw new InvalidOperationException(Resource.customResolversNotSupported);
327327
}
328328

329-
if (propertyMap.CustomExpression == null && propertyMap.SourceMember == null)
329+
if (propertyMap.CustomExpression == null && !propertyMap.SourceMembers.Any())
330330
throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Resource.srcMemberCannotBeNullFormat, typeSource.Name, typeDestination.Name, sourceFullName));
331331

332332
CompareSourceAndDestLiterals
@@ -351,7 +351,7 @@ void CompareSourceAndDestLiterals(Type mappedPropertyType, string mappedProperty
351351
var propertyMap = typeMap.GetPropertyMapByDestinationProperty(propertyName);
352352

353353
var sourceMemberInfo = typeSource.GetFieldOrProperty(propertyMap.DestinationProperty.Name);
354-
if (propertyMap.CustomExpression == null && propertyMap.SourceMember == null)//If sourceFullName has a period then the SourceMember cannot be null. The SourceMember is required to find the ProertyMap of its child object.
354+
if (propertyMap.CustomExpression == null && !propertyMap.SourceMembers.Any())//If sourceFullName has a period then the SourceMember cannot be null. The SourceMember is required to find the ProertyMap of its child object.
355355
throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Resource.srcMemberCannotBeNullFormat, typeSource.Name, typeDestination.Name, propertyName));
356356

357357
propertyMapInfoList.Add(new PropertyMapInfo(propertyMap.CustomExpression, propertyMap.SourceMembers.ToList()));

tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/XpressionMapperTests.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,19 @@ public void Test_Error_when_mapping_nested_expressions_when_enumerable_is_array_
588588
//Assert
589589
Assert.NotNull(expMapped);
590590
}
591+
592+
[Fact]
593+
public void Can_correctly_type_maps_for_child_properties()
594+
{
595+
//Arrange
596+
Expression<Func<OrderModel, bool>> src = x => x.Items.Any(i => i.Name == "Test");
597+
598+
//Act
599+
Expression<Func<OrderEntity, bool>> dest = mapper.Map<Expression<Func<OrderEntity, bool>>>(src);
600+
601+
//Assert
602+
Assert.NotNull(dest);
603+
}
591604
#endregion Tests
592605

593606
private static void SetupAutoMapper()
@@ -936,6 +949,31 @@ public class ChildDataClass
936949
public string Data { get; set; }
937950
}
938951

952+
class OrderModel
953+
{
954+
public IEnumerable<ItemModel> Items { get; set; }
955+
}
956+
957+
class ItemModel
958+
{
959+
public string Name { get; set; }
960+
}
961+
962+
class OrderEntity
963+
{
964+
public OrderData OrderData { get; set; }
965+
}
966+
967+
class OrderData
968+
{
969+
public IEnumerable<ItemEntity> Items { get; set; }
970+
}
971+
972+
class ItemEntity
973+
{
974+
public string Name { get; set; }
975+
}
976+
939977
public class OrganizationProfile : Profile
940978
{
941979
public OrganizationProfile()
@@ -1024,6 +1062,10 @@ public OrganizationProfile()
10241062
.ReverseMap()
10251063
.ForMember(d => d.ID, opt => opt.MapFrom(s => s.ID_));
10261064

1065+
CreateMap<OrderEntity, OrderModel>()
1066+
.ForMember(x => x.Items, opt => opt.MapFrom(x => x.OrderData.Items));
1067+
CreateMap<ItemEntity, ItemModel>();
1068+
10271069
CreateMissingTypeMaps = true;
10281070
}
10291071
}

0 commit comments

Comments
 (0)