Mapster.Tool - PropertySettingBuilder.Map(member, mapFunc, targetPropertyName) method is not working as expected!
評価
調査の方向性
PropertySettingBuilder.Map から開始し、Mapster.Tool 10.0.12 で UserCodeGenConfig の例を再現します。mapFunc 引数が生成された UserMapper.AdaptToDto の出力にどのように到達するかを追跡します。完了条件は、FullName が LastName だけではなく FirstName と LastName の両方から生成されることです。
索引モデルが issue の本文から書いたものです。
説明
I'm using -
Mapster 10.0.12
Mapster.Tool 10.0.12
.NET 10.0.400
I have the following entity model -
public class User
{
public int Id { get; set; }
public string Email { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
and I wanted the following DTO model -
public partial class UserDto
{
public int Id { get; set; }
public string Email { get; set; }
public string FullName { get; set; }
public int Age { get; set; }
}
and a mapper extension method to be generated which would map User.FirstName + " " + User.LastName to UserDto.FullName.
I used the following code -
public class UserCodeGenConfig : ICodeGenerationRegister
{
public void Register(CodeGenerationConfig config)
{
config.AdaptTo("[name]Dto", MapType.Map)
.ForType<User>(p =>
{
p.Ignore(s => s.FirstName);
p.Map(s => s.LastName, s => $"{s.FirstName} {s.LastName}", "FullName");
});
config.GenerateMapper("[name]Mapper")
.ForType<User>();
}
}
and used the model and extension generating commands with Mapster.Tool. Following are the generated codes -
public partial class UserDto
{
public int Id { get; set; }
public string Email { get; set; }
public string FullName { get; set; }
public int Age { get; set; }
}
public static partial class UserMapper
{
public static UserDto AdaptToDto(this User p1)
{
return p1 == null ? null : new UserDto()
{
Id = p1.Id,
Email = p1.Email,
FullName = p1.LastName,
Age = p1.Age
};
}
}
As you can see, the DTO model is generated as expected, but the mapping code is exactly what it would generate if I had used -
p.Map(s => s.LastName, "FullName");
instead of -
p.Map(s => s.LastName, s => $"{s.FirstName} {s.LastName}", "FullName");
Following is the source code documentation for the Map method in question -
/// <summary>
/// Map a specific property of the source type to a target property using a custom mapping function.
/// </summary>
/// <typeparam name="TReturn">Type of source property.</typeparam>
/// <typeparam name="TReturn2">Type of target property type.</typeparam>
/// <param name="member">A lambda expression that identifies the source property to be mapped.</param>
/// <param name="mapFunc">A lambda expression that defines the custom mapping function.</param>
/// <param name="targetPropertyName">The name of the target property to which the source property should be mapped.</param>
/// <returns></returns>
public PropertySettingBuilder<T> Map<TReturn, TReturn2>(Expression<Func<T, TReturn>> member, Expression<Func<T, TReturn2>> mapFunc, string? targetPropertyName = null);
So, it seems the tool is not respecting the 2nd parameter (Expression<Func<T, TReturn2>> mapFunc) of this Map method.
Is there anything I failed to understand or is this a bug? Is there any other approach to achieve the expected result?
- 主要言語
- C#
- スター
- 5.2k
- フォーク
- 411
- 平均マージ
- 1日 8時間
- マージ済み PR(30日)
- 4
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
MapsterMapper/Mapster のほかの issue
-
.NET Matrixオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
MapsterMapper/Mapster#1003 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 58/100
MapsterMapper/Mapster#1024 · コメント 1 件 ·
-
[Mapster Tool] Add support for global:: to disambiguate type names in generated mappers対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープンimprovement
難易度 3/5 1〜2日 初心者へのやさしさ 65/100
MapsterMapper/Mapster#1020 · コメント 5 件 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 57/100
MapsterMapper/Mapster#1007 · コメント 5 件 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 55/100
MapsterMapper/Mapster#1005 ·
MapsterMapper/Mapster の issue をすべて見る
似ている issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
AvaloniaUI/Avalonia#22568 ·
メンテナーはふだん 2 日以内に返信
-
[bug] 截图失败日志冲爆硬盘オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 63/100
babalae/better-genshin-impact#3846 · コメント 2 件 ·
メンテナーはふだん 2 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
lugassawan/swe-workbench#823 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
microsoft/fluentui-blazor#5518 ·
メンテナーはふだん 1 日以内に返信
-
devtools
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信