AutoMapperを使用することによりあなたのような何かを行うことができます。
public void Save(UserViewModel uv)
{
// this throws error: cannot convert from UserViewModel to Entity.User
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<UserViewModel , User>();
});
User u = config.CreateMapper().Map<User>(uv);
MyRepository.UpdateUser(u);
}
、または手動:
public void Save(UserViewModel uv)
{
User u = new User()
{
Id = uv.Id
Name = uv.Name;
Address = uv.Address;
};
MyRepository.UpdateUser(u);
}
ビューモデルとモデルを変更してコードを変更する必要がある場合は手動で行うのは適切ではありませんが、Automapper
ではneコードを変更します。
EDIT1:
これはリポジトリ(DATAACCESSコア)にモデル・ビューを使用するのは良い考えではありませんので、あなたのpublic void UpdateUser(User u)
を維持する方が良いだろうし、それを変更しない、外にそれはに優れていますuser
〜UpdateUser
ではなく、UserViewModel
としてください。
EDIT2:私はUserViewModel
を通過したとき答えポストの私の意見を非で
は、SOC(懸念の分離)に関連していなくても、鉱山...
1 - 私は、これを侵してきましたSOC ....
2-私はもう一度、私はまた、SOCに違反したユーザー層の中に表示されます。
私は
プレゼンテーション< ---->プロキシ< ---->リポジトリ....最良の方法は、プロキシなどの中間層であると思います。
正しい方法は、以下で説明するようにAutoMapperを使用していると私の答えを見て、あなたのフィードバックを教えてください。 – Aria