Branch | Status |
---|---|
Master | |
Develop |
"AutoMapper" like, Roslyn based, code fix provider that allows to generate mapping code in design time.
You can download it as Visual Studio Extension from Visual Studio Marketplace.
Non-void method that takes single parameter
public UserDTO Map(UserEntity entity)
{
}
Void method that takes two parameters
public void Update(UserDTO source, UserEntity target)
{
}
Constructor method that takes single parameter
public UserDTO(UserEntity user)
{
}
Void member method that takes single parameter
public void UpdateWith(UserEntity en)
{
}
CS0029 Cannot implicitly convert type 'type' to 'type'
CS0266 Cannot implicitly convert type 'type1' to 'type2'. An explicit conversion exists (are you missing a cast?)
CS7036 There is no argument given that corresponds to the required formal parameter
-
Mapping Property-To-Property
target.FirstName = source.FirstName; target.LastName = source.LastName;
-
Mapping Method Call-To-Property
target.Total = source.GetTotal()
-
Flattening with sub-property
target.UnitId = source.Unit.Id
-
Mapping complex property
var targetMainAddress = new AddressDTO(); targetMainAddress.BuildingNo = source.MainAddress.BuildingNo; targetMainAddress.City = source.MainAddress.City; targetMainAddress.FlatNo = source.MainAddress.FlatNo; targetMainAddress.Street = source.MainAddress.Street; targetMainAddress.ZipCode = source.MainAddress.ZipCode; target.MainAddress = targetMainAddress;
-
Mapping collections
target.Addresses = source.Addresses.Select(addressEntity => { var addressDTO = new AddressDTO(); addressDTO.BuildingNo = addressEntity.BuildingNo; addressDTO.City = addressEntity.City; addressDTO.FlatNo = addressEntity.FlatNo; addressDTO.Street = addressEntity.Street; addressDTO.ZipCode = addressEntity.ZipCode; return addressDTO; }).ToList().AsReadOnly();
-
Unwrapping wrappers
customerEntity.Kind = cutomerDTO.Kind.Selected;
public enum CustomerKind { Regular, Premium } public class Dropdown<T> { public List<T> AllOptions { get; set; } public T Selected { get; set; } } public class CustomerDTO { public string Name { get; set; } public Dropdown<CustomerKind> Kind { get; set; } } public class UserEntity { public string Name { get; set; } public CustomerKind Kind { get; set; } }
-
Using existing direct mapping constructor
target.MainAddress = new AddressDTO(source.MainAddress);
-
using existing multi-parameter constuctor
this.User = new UserDTO(firstName: entity.FirstName, lastName: entity.LastName, age: entity.Age);