0
AutoMapperを使用して、同じタイプの2つのオブジェクトをマージし、nullまたはfalseのフィールドを上書きします。例えば、私は次のモデルを持っていると言う:同じタイプのAutomapperマッピングオブジェクト - Boolを上書きする
public class TestModel
{
public string A { get; set; }
public string B { get; set; }
public bool C { get; set; }
public bool D { get; set; }
}
そして、例えば2つのモデルを設定:
var model1 = new TestModel
{
A = "a",
B = "b",
C = true,
D = false
}
var model1 = new TestModel
{
A = null,
B = "b",
C = false,
D = true
}
を私がマージされたモデルが
var mergedModel = new TestModel
{
A = "a",
B = "b",
C = true,
D = true
}
ようになりますので、それらをマージしたいですこれまでのところ、私は以下のマッパー構成を持っています:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<TestModel, TestModel>()
.ForAllMembers(options =>
{
options.Condition((source, destination, member) => member != null);
});
});
var mergedModel = Mapper.Map(model1, model2);
しかしもちろん、私はmergedModel.D = falseで終わります。他のどのような条件が必要なので、偽のブールは上書きされますか?
質問に答えるものではないが、しかし、コードの読みやすさの観点から、:
しかし、あなたが本当にAutoMapperの魔法を経由してそれを実行したい場合は、この条件を追加することができます(TestModel、TestModel)静的なカスタムマッピングメソッドは、より直感的かもしれませんが、いくつかの付加価値を適用すると同時に、ビジネスオブジェクトはgrokに簡単になりませんか? (つまり、Automapperでビジネスロジックを隠しておくと、保守が面倒になる可能性があります) – StuartLC
これはAutoMapperの本当に奇妙な使用例です。クラス自体の論理をマージメソッドなどでカプセル化します –