Skip to content

netkoala/MappingGenerator

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mapping Generator

Branch Status
Master Build status
Develop Build status

"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.

Further Development

If you find this extension useful (you feel it helps you on the daily basis) you can support further development by bying me a coffee (it's simple, just click the button below). Sometimes it's hard to stay awake till midnight implementing new features, coffee helps me with that. I'm really appreciate for your support.

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)
{
    
}

Generating pure mapping method implementation

Updating method

Void method that takes two parameters

public void Update(UserDTO source, UserEntity target)
{
    
}

Generating update method implementation

Mapping Constructor

Constructor method that takes single complex parameter

public UserDTO(UserEntity user)
{
    
}

Generating mapping constructor implementation

Constructor method that takes more than one parameter

public UserDTO(string firstName, string lastName, int age, int cash)
{
}

Generating multi-parameter constructor

Updating member method

Void member method that takes single parameter

public void UpdateWith(UserEntity en)
{
    
}

Generating update member method imeplementation

Void member method with more than one parameter

public void Update(string firstName, string lastName, int age)
{
}

Generate inline code for fixing Compiler Errors:

CS0029 Cannot implicitly convert type 'type' to 'type'

cs0029

CS0266 Cannot implicitly convert type 'type1' to 'type2'. An explicit conversion exists (are you missing a cast?)

cs0266

CS7036 There is no argument given that corresponds to the required formal parameter

CS7036

Other mappings

  • Complete empty initialization block Generate initialization bloc

  • Provide local accessoble variables as parameters for method and constructor invocation locals as parameters

Mapping rules

  • 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);

About

"AutoMapper" like, Roslyn based, code fix provider that allows to generate mapping code in design time.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 97.0%
  • PowerShell 3.0%