AutoMapper 8.0 missing GetPropertyMaps
up vote
0
down vote
favorite
Prior to AutoMapper 8.0, I used this code to find a property mapping by string, example: entity model has property named "currency_id" and DTO has property named "currency". I have defined bi-directional mapping in AutoMapper, and I used this code to find source/target property relat
public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
{
var mapper = AutoMapper.IMapper.ConfigurationProvider;
// TSrc = source generic type
// TDst = destination generic type
var map = mapper.FindTypeMapFor<TSrc, TDst>();
var propertyMap = map.GetPropertyMaps()
.FirstOrDefault(pm =>
pm.SourceMember.Name == sourceProperty
);
return propertyMap.DestinationProperty.Name;
}
In AutoMapper Profile:
this.CreateMap<EntityModels.contact, DTO.contact>()
.ForMember(m => m.currency, src => src.MapFrom(f => f.currency_id))
;
this.CreateMap<DTO.contact, EntityModels.contact>()
.ForMember(m => m.currency_id, src => src.MapFrom(f => f.currency))
;
When I called my method like this:
var _dboField = GetDestinationPropertyFor<DTO.contact, EntityModels.contact>(this.mapper, "currency");
Console.WriteLine(_dboField);
// output should be "currency_id"
After upgrading to AutoMapper 8.0 I got this error at build:
'TypeMap' does not contain a definition for 'GetPropertyMaps' and no accessible extension method 'GetPropertyMaps' accepting a first argument of type 'TypeMap' could be found (are you missing a using directive or an assembly reference?)
What are replacements for GetPropertyMaps in AutoMapper 8.0?
Thanks!
.net-core automapper
|
show 2 more comments
up vote
0
down vote
favorite
Prior to AutoMapper 8.0, I used this code to find a property mapping by string, example: entity model has property named "currency_id" and DTO has property named "currency". I have defined bi-directional mapping in AutoMapper, and I used this code to find source/target property relat
public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
{
var mapper = AutoMapper.IMapper.ConfigurationProvider;
// TSrc = source generic type
// TDst = destination generic type
var map = mapper.FindTypeMapFor<TSrc, TDst>();
var propertyMap = map.GetPropertyMaps()
.FirstOrDefault(pm =>
pm.SourceMember.Name == sourceProperty
);
return propertyMap.DestinationProperty.Name;
}
In AutoMapper Profile:
this.CreateMap<EntityModels.contact, DTO.contact>()
.ForMember(m => m.currency, src => src.MapFrom(f => f.currency_id))
;
this.CreateMap<DTO.contact, EntityModels.contact>()
.ForMember(m => m.currency_id, src => src.MapFrom(f => f.currency))
;
When I called my method like this:
var _dboField = GetDestinationPropertyFor<DTO.contact, EntityModels.contact>(this.mapper, "currency");
Console.WriteLine(_dboField);
// output should be "currency_id"
After upgrading to AutoMapper 8.0 I got this error at build:
'TypeMap' does not contain a definition for 'GetPropertyMaps' and no accessible extension method 'GetPropertyMaps' accepting a first argument of type 'TypeMap' could be found (are you missing a using directive or an assembly reference?)
What are replacements for GetPropertyMaps in AutoMapper 8.0?
Thanks!
.net-core automapper
But why do you need that destination property? Maybe there is a better way to do what you want.
– Lucian Bargaoanu
Nov 19 at 11:19
This is a workaround for OData bugs. API accepts arguments like property names from DTO but has to 'reflect' it to Entity model. For example: $orderby=currency should build Expression like .OrderBy(o => o.currency_id). I have this already done, what is the problem is missing feature in AutoMapper
– Luke1988
Nov 19 at 11:25
That is done by mapping expressions. What you're doing is a hack. MemberMaps is what you want. But really, that code is not how you solve the problem.
– Lucian Bargaoanu
Nov 19 at 12:08
Thanks. Could you give me a direction? What should I be looking for?
– Luke1988
Nov 19 at 12:32
github.com/AutoMapper/AutoMapper.Extensions.ExpressionMapping
– Lucian Bargaoanu
Nov 19 at 12:37
|
show 2 more comments
up vote
0
down vote
favorite
up vote
0
down vote
favorite
Prior to AutoMapper 8.0, I used this code to find a property mapping by string, example: entity model has property named "currency_id" and DTO has property named "currency". I have defined bi-directional mapping in AutoMapper, and I used this code to find source/target property relat
public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
{
var mapper = AutoMapper.IMapper.ConfigurationProvider;
// TSrc = source generic type
// TDst = destination generic type
var map = mapper.FindTypeMapFor<TSrc, TDst>();
var propertyMap = map.GetPropertyMaps()
.FirstOrDefault(pm =>
pm.SourceMember.Name == sourceProperty
);
return propertyMap.DestinationProperty.Name;
}
In AutoMapper Profile:
this.CreateMap<EntityModels.contact, DTO.contact>()
.ForMember(m => m.currency, src => src.MapFrom(f => f.currency_id))
;
this.CreateMap<DTO.contact, EntityModels.contact>()
.ForMember(m => m.currency_id, src => src.MapFrom(f => f.currency))
;
When I called my method like this:
var _dboField = GetDestinationPropertyFor<DTO.contact, EntityModels.contact>(this.mapper, "currency");
Console.WriteLine(_dboField);
// output should be "currency_id"
After upgrading to AutoMapper 8.0 I got this error at build:
'TypeMap' does not contain a definition for 'GetPropertyMaps' and no accessible extension method 'GetPropertyMaps' accepting a first argument of type 'TypeMap' could be found (are you missing a using directive or an assembly reference?)
What are replacements for GetPropertyMaps in AutoMapper 8.0?
Thanks!
.net-core automapper
Prior to AutoMapper 8.0, I used this code to find a property mapping by string, example: entity model has property named "currency_id" and DTO has property named "currency". I have defined bi-directional mapping in AutoMapper, and I used this code to find source/target property relat
public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
{
var mapper = AutoMapper.IMapper.ConfigurationProvider;
// TSrc = source generic type
// TDst = destination generic type
var map = mapper.FindTypeMapFor<TSrc, TDst>();
var propertyMap = map.GetPropertyMaps()
.FirstOrDefault(pm =>
pm.SourceMember.Name == sourceProperty
);
return propertyMap.DestinationProperty.Name;
}
In AutoMapper Profile:
this.CreateMap<EntityModels.contact, DTO.contact>()
.ForMember(m => m.currency, src => src.MapFrom(f => f.currency_id))
;
this.CreateMap<DTO.contact, EntityModels.contact>()
.ForMember(m => m.currency_id, src => src.MapFrom(f => f.currency))
;
When I called my method like this:
var _dboField = GetDestinationPropertyFor<DTO.contact, EntityModels.contact>(this.mapper, "currency");
Console.WriteLine(_dboField);
// output should be "currency_id"
After upgrading to AutoMapper 8.0 I got this error at build:
'TypeMap' does not contain a definition for 'GetPropertyMaps' and no accessible extension method 'GetPropertyMaps' accepting a first argument of type 'TypeMap' could be found (are you missing a using directive or an assembly reference?)
What are replacements for GetPropertyMaps in AutoMapper 8.0?
Thanks!
.net-core automapper
.net-core automapper
asked Nov 19 at 9:17
Luke1988
14629
14629
But why do you need that destination property? Maybe there is a better way to do what you want.
– Lucian Bargaoanu
Nov 19 at 11:19
This is a workaround for OData bugs. API accepts arguments like property names from DTO but has to 'reflect' it to Entity model. For example: $orderby=currency should build Expression like .OrderBy(o => o.currency_id). I have this already done, what is the problem is missing feature in AutoMapper
– Luke1988
Nov 19 at 11:25
That is done by mapping expressions. What you're doing is a hack. MemberMaps is what you want. But really, that code is not how you solve the problem.
– Lucian Bargaoanu
Nov 19 at 12:08
Thanks. Could you give me a direction? What should I be looking for?
– Luke1988
Nov 19 at 12:32
github.com/AutoMapper/AutoMapper.Extensions.ExpressionMapping
– Lucian Bargaoanu
Nov 19 at 12:37
|
show 2 more comments
But why do you need that destination property? Maybe there is a better way to do what you want.
– Lucian Bargaoanu
Nov 19 at 11:19
This is a workaround for OData bugs. API accepts arguments like property names from DTO but has to 'reflect' it to Entity model. For example: $orderby=currency should build Expression like .OrderBy(o => o.currency_id). I have this already done, what is the problem is missing feature in AutoMapper
– Luke1988
Nov 19 at 11:25
That is done by mapping expressions. What you're doing is a hack. MemberMaps is what you want. But really, that code is not how you solve the problem.
– Lucian Bargaoanu
Nov 19 at 12:08
Thanks. Could you give me a direction? What should I be looking for?
– Luke1988
Nov 19 at 12:32
github.com/AutoMapper/AutoMapper.Extensions.ExpressionMapping
– Lucian Bargaoanu
Nov 19 at 12:37
But why do you need that destination property? Maybe there is a better way to do what you want.
– Lucian Bargaoanu
Nov 19 at 11:19
But why do you need that destination property? Maybe there is a better way to do what you want.
– Lucian Bargaoanu
Nov 19 at 11:19
This is a workaround for OData bugs. API accepts arguments like property names from DTO but has to 'reflect' it to Entity model. For example: $orderby=currency should build Expression like .OrderBy(o => o.currency_id). I have this already done, what is the problem is missing feature in AutoMapper
– Luke1988
Nov 19 at 11:25
This is a workaround for OData bugs. API accepts arguments like property names from DTO but has to 'reflect' it to Entity model. For example: $orderby=currency should build Expression like .OrderBy(o => o.currency_id). I have this already done, what is the problem is missing feature in AutoMapper
– Luke1988
Nov 19 at 11:25
That is done by mapping expressions. What you're doing is a hack. MemberMaps is what you want. But really, that code is not how you solve the problem.
– Lucian Bargaoanu
Nov 19 at 12:08
That is done by mapping expressions. What you're doing is a hack. MemberMaps is what you want. But really, that code is not how you solve the problem.
– Lucian Bargaoanu
Nov 19 at 12:08
Thanks. Could you give me a direction? What should I be looking for?
– Luke1988
Nov 19 at 12:32
Thanks. Could you give me a direction? What should I be looking for?
– Luke1988
Nov 19 at 12:32
github.com/AutoMapper/AutoMapper.Extensions.ExpressionMapping
– Lucian Bargaoanu
Nov 19 at 12:37
github.com/AutoMapper/AutoMapper.Extensions.ExpressionMapping
– Lucian Bargaoanu
Nov 19 at 12:37
|
show 2 more comments
1 Answer
1
active
oldest
votes
up vote
0
down vote
accepted
As Lucian suggested, MemberMaps is a possible replacement. However, PropertyMaps does exactly the same as GetPropertyMaps in AutoMapper 7.0. DestinationProperty
has also been renamed to DestinationMember
.
AutoMapper 7.0 code:
public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
{
var mapper = AutoMapper.IMapper.ConfigurationProvider;
// TSrc = source generic type
// TDst = destination generic type
var map = mapper.FindTypeMapFor<TSrc, TDst>();
var propertyMap = map.GetPropertyMaps()
.FirstOrDefault(pm =>
pm.SourceMember.Name == sourceProperty
);
return propertyMap.DestinationProperty.Name;
}
AutoMapper 8.0 code:
public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
{
var mapper = AutoMapper.IMapper.ConfigurationProvider;
// TSrc = source generic type
// TDst = destination generic type
var map = mapper.FindTypeMapFor<TSrc, TDst>();
var propertyMap = map.PropertyMaps
.FirstOrDefault(pm =>
pm.SourceMember.Name == sourceProperty
);
return propertyMap.DestinationMember.Name;
}
As you probably saw in the source code, member maps also includes path maps and constructor maps. So if you don't use ForPath and constructor mapping, you don't need that.
– Lucian Bargaoanu
Nov 25 at 10:51
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
As Lucian suggested, MemberMaps is a possible replacement. However, PropertyMaps does exactly the same as GetPropertyMaps in AutoMapper 7.0. DestinationProperty
has also been renamed to DestinationMember
.
AutoMapper 7.0 code:
public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
{
var mapper = AutoMapper.IMapper.ConfigurationProvider;
// TSrc = source generic type
// TDst = destination generic type
var map = mapper.FindTypeMapFor<TSrc, TDst>();
var propertyMap = map.GetPropertyMaps()
.FirstOrDefault(pm =>
pm.SourceMember.Name == sourceProperty
);
return propertyMap.DestinationProperty.Name;
}
AutoMapper 8.0 code:
public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
{
var mapper = AutoMapper.IMapper.ConfigurationProvider;
// TSrc = source generic type
// TDst = destination generic type
var map = mapper.FindTypeMapFor<TSrc, TDst>();
var propertyMap = map.PropertyMaps
.FirstOrDefault(pm =>
pm.SourceMember.Name == sourceProperty
);
return propertyMap.DestinationMember.Name;
}
As you probably saw in the source code, member maps also includes path maps and constructor maps. So if you don't use ForPath and constructor mapping, you don't need that.
– Lucian Bargaoanu
Nov 25 at 10:51
add a comment |
up vote
0
down vote
accepted
As Lucian suggested, MemberMaps is a possible replacement. However, PropertyMaps does exactly the same as GetPropertyMaps in AutoMapper 7.0. DestinationProperty
has also been renamed to DestinationMember
.
AutoMapper 7.0 code:
public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
{
var mapper = AutoMapper.IMapper.ConfigurationProvider;
// TSrc = source generic type
// TDst = destination generic type
var map = mapper.FindTypeMapFor<TSrc, TDst>();
var propertyMap = map.GetPropertyMaps()
.FirstOrDefault(pm =>
pm.SourceMember.Name == sourceProperty
);
return propertyMap.DestinationProperty.Name;
}
AutoMapper 8.0 code:
public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
{
var mapper = AutoMapper.IMapper.ConfigurationProvider;
// TSrc = source generic type
// TDst = destination generic type
var map = mapper.FindTypeMapFor<TSrc, TDst>();
var propertyMap = map.PropertyMaps
.FirstOrDefault(pm =>
pm.SourceMember.Name == sourceProperty
);
return propertyMap.DestinationMember.Name;
}
As you probably saw in the source code, member maps also includes path maps and constructor maps. So if you don't use ForPath and constructor mapping, you don't need that.
– Lucian Bargaoanu
Nov 25 at 10:51
add a comment |
up vote
0
down vote
accepted
up vote
0
down vote
accepted
As Lucian suggested, MemberMaps is a possible replacement. However, PropertyMaps does exactly the same as GetPropertyMaps in AutoMapper 7.0. DestinationProperty
has also been renamed to DestinationMember
.
AutoMapper 7.0 code:
public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
{
var mapper = AutoMapper.IMapper.ConfigurationProvider;
// TSrc = source generic type
// TDst = destination generic type
var map = mapper.FindTypeMapFor<TSrc, TDst>();
var propertyMap = map.GetPropertyMaps()
.FirstOrDefault(pm =>
pm.SourceMember.Name == sourceProperty
);
return propertyMap.DestinationProperty.Name;
}
AutoMapper 8.0 code:
public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
{
var mapper = AutoMapper.IMapper.ConfigurationProvider;
// TSrc = source generic type
// TDst = destination generic type
var map = mapper.FindTypeMapFor<TSrc, TDst>();
var propertyMap = map.PropertyMaps
.FirstOrDefault(pm =>
pm.SourceMember.Name == sourceProperty
);
return propertyMap.DestinationMember.Name;
}
As Lucian suggested, MemberMaps is a possible replacement. However, PropertyMaps does exactly the same as GetPropertyMaps in AutoMapper 7.0. DestinationProperty
has also been renamed to DestinationMember
.
AutoMapper 7.0 code:
public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
{
var mapper = AutoMapper.IMapper.ConfigurationProvider;
// TSrc = source generic type
// TDst = destination generic type
var map = mapper.FindTypeMapFor<TSrc, TDst>();
var propertyMap = map.GetPropertyMaps()
.FirstOrDefault(pm =>
pm.SourceMember.Name == sourceProperty
);
return propertyMap.DestinationProperty.Name;
}
AutoMapper 8.0 code:
public static string GetDestinationPropertyFor<TSrc, TDst>(IMapper IMapper, string sourceProperty)
{
var mapper = AutoMapper.IMapper.ConfigurationProvider;
// TSrc = source generic type
// TDst = destination generic type
var map = mapper.FindTypeMapFor<TSrc, TDst>();
var propertyMap = map.PropertyMaps
.FirstOrDefault(pm =>
pm.SourceMember.Name == sourceProperty
);
return propertyMap.DestinationMember.Name;
}
answered Nov 25 at 9:50
Luke1988
14629
14629
As you probably saw in the source code, member maps also includes path maps and constructor maps. So if you don't use ForPath and constructor mapping, you don't need that.
– Lucian Bargaoanu
Nov 25 at 10:51
add a comment |
As you probably saw in the source code, member maps also includes path maps and constructor maps. So if you don't use ForPath and constructor mapping, you don't need that.
– Lucian Bargaoanu
Nov 25 at 10:51
As you probably saw in the source code, member maps also includes path maps and constructor maps. So if you don't use ForPath and constructor mapping, you don't need that.
– Lucian Bargaoanu
Nov 25 at 10:51
As you probably saw in the source code, member maps also includes path maps and constructor maps. So if you don't use ForPath and constructor mapping, you don't need that.
– Lucian Bargaoanu
Nov 25 at 10:51
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53371494%2fautomapper-8-0-missing-getpropertymaps%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
But why do you need that destination property? Maybe there is a better way to do what you want.
– Lucian Bargaoanu
Nov 19 at 11:19
This is a workaround for OData bugs. API accepts arguments like property names from DTO but has to 'reflect' it to Entity model. For example: $orderby=currency should build Expression like .OrderBy(o => o.currency_id). I have this already done, what is the problem is missing feature in AutoMapper
– Luke1988
Nov 19 at 11:25
That is done by mapping expressions. What you're doing is a hack. MemberMaps is what you want. But really, that code is not how you solve the problem.
– Lucian Bargaoanu
Nov 19 at 12:08
Thanks. Could you give me a direction? What should I be looking for?
– Luke1988
Nov 19 at 12:32
github.com/AutoMapper/AutoMapper.Extensions.ExpressionMapping
– Lucian Bargaoanu
Nov 19 at 12:37