Mapping Generator
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.
Contributing
Before you start any contributig work, plase read the contribution guidline
Main features
Generate mapping method body
Pure mapping method
Non-void method that takes single parameter
public UserDTO Map(UserEntity entity)
{
}
Updating method
Void method that takes two parameters
public void Update(UserDTO source, UserEntity target)
{
}
Mapping Constructor
Constructor method that takes single parameter
public UserDTO(UserEntity user)
{
}
Updating member method
Void member method that takes single parameter
public void UpdateWith(UserEntity en)
{
}
Generate inline code for fixing Compiler Errors:
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 features
-
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);