Skip to content

Support DTO auto Gen #4

@vipwan

Description

@vipwan

nuget add:

dotnet add package Biwen.AutoClassGen.Attributes

Entitys define:

public class Person
{
    [Required]
    public string Name { get; set; } = string.Empty;

    [Required, Range(0, 200)]
    public int Age { get; set; }

    //模拟嵌套
    public Address Address { get; set; } = new Address();

    //模拟集合
    public List<Hobby> Hobbies { get; set; } = [];

    /// <summary>
    /// 这是一个忽略的字段
    /// </summary>
    public string Igrone { get; set; } = string.Empty;


    [AutoDtoIgroned]
    public string Igrone2 { get; set; } = null!;

}

public class Address
{
    [Required]
    public string Street { get; set; } = string.Empty;
    [Required]
    public string City { get; set; } = string.Empty;
    [Required]
    public string State { get; set; } = string.Empty;
    [Required]
    public string ZipCode { get; set; } = string.Empty;
}

public class Hobby
{
    [Required]
    public string Name { get; set; } = string.Empty;
    [Required]
    public string Description { get; set; } = string.Empty;

    public HobbyExtend Extend { get; set; } = new HobbyExtend();

}

public class HobbyExtend
{
    public string Extend1 { get; set; } = string.Empty;

    public string Extend2 { get; set; } = string.Empty;

    public InnerExtend Extend3 { get; set; } = new InnerExtend();

}

public class InnerExtend
{
    public string InnerExtendMsg { get; set; } = string.Empty;
}

usage :

/// <summary>
/// 模拟的复杂DTO
/// </summary>
[AutoDto<Person>(nameof(Person.Igrone))]
[AutoDtoComplex(3)]
public partial record PersonComplexDto;

/// <summary>
/// 没有复杂属性嵌套的DTO
/// </summary>
[AutoDto<Person>(nameof(Person.Igrone))]
public partial record PersonDto;

generated :

// <auto-generated />
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

#pragma warning disable

//generate Person-PersonComplexDto
namespace Biwen.AutoClassGen.TestConsole.Dtos
{
    using Biwen.AutoClassGen.TestConsole.Dtos;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;

    public partial record class PersonComplexDto
    {
        /// <inheritdoc cref = "Person.Name"/>
        [Required]
        public string Name { get; set; }

        /// <inheritdoc cref = "Person.Age"/>
        [Required]
        [Range(0, 200)]
        public int Age { get; set; }
        /// <inheritdoc cref = "Person.Address"/>
        public AddressDto Address { get; set; }
        /// <inheritdoc cref = "Person.Hobbies"/>
        public System.Collections.Generic.List<HobbyDto> Hobbies { get; set; }
    }
}

namespace Biwen.AutoClassGen.TestConsole.Dtos
{
    using Biwen.AutoClassGen.TestConsole.Dtos;
    using System.Linq;

    public static partial class PersonToPersonComplexDtoExtentions
    {
        /// <summary>
        /// custom mapper
        /// </summary>
        static partial void MapperToPartial(Person from, PersonComplexDto to);
        /// <summary>
        /// mapper to PersonComplexDto
        /// </summary>
        /// <returns></returns>
        public static PersonComplexDto MapperToPersonComplexDto(this Person model)
        {
            if (model == null)
                return null;
            var retn = new PersonComplexDto()
            {
                Name = model.Name,
                Age = model.Age,
                Address = model.Address?.MapperToAddressDto(),
                Hobbies = model.Hobbies != null ? model.Hobbies.Select(x => x?.MapperToHobbyDto()).ToList() : null,
            };
            MapperToPartial(model, retn);
            return retn;
        }

        /// <summary>
        /// ProjectTo PersonComplexDto
        /// </summary>
        public static IQueryable<PersonComplexDto> ProjectToPersonComplexDto(this IQueryable<Person> query)
        {
            return query.Select(model => model.MapperToPersonComplexDto());
        }
    }

    public static partial class PersonComplexDtoToPersonExtentions
    {
        /// <summary>
        /// custom mapper
        /// </summary>
        static partial void MapperToPartial(PersonComplexDto from, Person to);
        /// <summary>
        /// mapper to Person
        /// </summary>
        /// <returns></returns>
        public static Person MapperToPerson(this PersonComplexDto model)
        {
            if (model == null)
                return null;
            var retn = new Person()
            {
                Name = model.Name,
                Age = model.Age,
                Address = model.Address?.MapperToAddress(),
                Hobbies = model.Hobbies != null ? model.Hobbies.Select(x => x?.MapperToHobby()).ToList() : null,
            };
            MapperToPartial(model, retn);
            return retn;
        }
    }
}

//generate Person-PersonDto
namespace Biwen.AutoClassGen.TestConsole.Dtos
{
    using Biwen.AutoClassGen.TestConsole.Dtos;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;

    public partial record class PersonDto
    {
        /// <inheritdoc cref = "Person.Name"/>
        [Required]
        public string Name { get; set; }

        /// <inheritdoc cref = "Person.Age"/>
        [Required]
        [Range(0, 200)]
        public int Age { get; set; }
        /// <inheritdoc cref = "Person.Address"/>
        public Biwen.AutoClassGen.TestConsole.Dtos.Address Address { get; set; }
        /// <inheritdoc cref = "Person.Hobbies"/>
        public System.Collections.Generic.List<Biwen.AutoClassGen.TestConsole.Dtos.Hobby> Hobbies { get; set; }
    }
}

namespace Biwen.AutoClassGen.TestConsole.Dtos
{
    using Biwen.AutoClassGen.TestConsole.Dtos;
    using System.Linq;

    public static partial class PersonToPersonDtoExtentions
    {
        /// <summary>
        /// custom mapper
        /// </summary>
        static partial void MapperToPartial(Person from, PersonDto to);
        /// <summary>
        /// mapper to PersonDto
        /// </summary>
        /// <returns></returns>
        public static PersonDto MapperToPersonDto(this Person model)
        {
            if (model == null)
                return null;
            var retn = new PersonDto()
            {
                Name = model.Name,
                Age = model.Age,
                Address = model.Address,
                Hobbies = model.Hobbies,
            };
            MapperToPartial(model, retn);
            return retn;
        }

        /// <summary>
        /// ProjectTo PersonDto
        /// </summary>
        public static IQueryable<PersonDto> ProjectToPersonDto(this IQueryable<Person> query)
        {
            return query.Select(model => model.MapperToPersonDto());
        }
    }

    public static partial class PersonDtoToPersonExtentions
    {
        /// <summary>
        /// custom mapper
        /// </summary>
        static partial void MapperToPartial(PersonDto from, Person to);
        /// <summary>
        /// mapper to Person
        /// </summary>
        /// <returns></returns>
        public static Person MapperToPerson(this PersonDto model)
        {
            if (model == null)
                return null;
            var retn = new Person()
            {
                Name = model.Name,
                Age = model.Age,
                Address = model.Address,
                Hobbies = model.Hobbies,
            };
            MapperToPartial(model, retn);
            return retn;
        }
    }
}

//generate Address-AddressDto
namespace Biwen.AutoClassGen.TestConsole.Dtos
{
    using Biwen.AutoClassGen.TestConsole.Dtos;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;

    public partial class AddressDto
    {
        /// <inheritdoc cref = "Address.Street"/>
        [Required]
        public string Street { get; set; }

        /// <inheritdoc cref = "Address.City"/>
        [Required]
        public string City { get; set; }

        /// <inheritdoc cref = "Address.State"/>
        [Required]
        public string State { get; set; }

        /// <inheritdoc cref = "Address.ZipCode"/>
        [Required]
        public string ZipCode { get; set; }
    }
}

namespace Biwen.AutoClassGen.TestConsole.Dtos
{
    using Biwen.AutoClassGen.TestConsole.Dtos;
    using System.Linq;
    using System.Net;

    public static partial class AddressToAddressDtoExtentions
    {
        /// <summary>
        /// custom mapper
        /// </summary>
        static partial void MapperToPartial(Address from, AddressDto to);
        /// <summary>
        /// mapper to AddressDto
        /// </summary>
        /// <returns></returns>
        public static AddressDto MapperToAddressDto(this Address model)
        {
            if (model == null)
                return null;
            var retn = new AddressDto()
            {
                Street = model.Street,
                City = model.City,
                State = model.State,
                ZipCode = model.ZipCode,
            };
            MapperToPartial(model, retn);
            return retn;
        }

        /// <summary>
        /// ProjectTo AddressDto
        /// </summary>
        public static IQueryable<AddressDto> ProjectToAddressDto(this IQueryable<Address> query)
        {
            return query.Select(model => model.MapperToAddressDto());
        }
    }

    public static partial class AddressDtoToAddressExtentions
    {
        /// <summary>
        /// custom mapper
        /// </summary>
        static partial void MapperToPartial(AddressDto from, Address to);
        /// <summary>
        /// mapper to Address
        /// </summary>
        /// <returns></returns>
        public static Address MapperToAddress(this AddressDto model)
        {
            if (model == null)
                return null;
            var retn = new Address()
            {
                Street = model.Street,
                City = model.City,
                State = model.State,
                ZipCode = model.ZipCode,
            };
            MapperToPartial(model, retn);
            return retn;
        }
    }
}

//generate Hobby-HobbyDto
namespace Biwen.AutoClassGen.TestConsole.Dtos
{
    using Biwen.AutoClassGen.TestConsole.Dtos;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;

    public partial class HobbyDto
    {
        /// <inheritdoc cref = "Hobby.Name"/>
        [Required]
        public string Name { get; set; }

        /// <inheritdoc cref = "Hobby.Description"/>
        [Required]
        public string Description { get; set; }
        /// <inheritdoc cref = "Hobby.Extend"/>
        public HobbyExtendDto Extend { get; set; }
    }
}

namespace Biwen.AutoClassGen.TestConsole.Dtos
{
    using Biwen.AutoClassGen.TestConsole.Dtos;
    using System.Linq;

    public static partial class HobbyToHobbyDtoExtentions
    {
        /// <summary>
        /// custom mapper
        /// </summary>
        static partial void MapperToPartial(Hobby from, HobbyDto to);
        /// <summary>
        /// mapper to HobbyDto
        /// </summary>
        /// <returns></returns>
        public static HobbyDto MapperToHobbyDto(this Hobby model)
        {
            if (model == null)
                return null;
            var retn = new HobbyDto()
            {
                Name = model.Name,
                Description = model.Description,
                Extend = model.Extend?.MapperToHobbyExtendDto(),
            };
            MapperToPartial(model, retn);
            return retn;
        }

        /// <summary>
        /// ProjectTo HobbyDto
        /// </summary>
        public static IQueryable<HobbyDto> ProjectToHobbyDto(this IQueryable<Hobby> query)
        {
            return query.Select(model => model.MapperToHobbyDto());
        }
    }

    public static partial class HobbyDtoToHobbyExtentions
    {
        /// <summary>
        /// custom mapper
        /// </summary>
        static partial void MapperToPartial(HobbyDto from, Hobby to);
        /// <summary>
        /// mapper to Hobby
        /// </summary>
        /// <returns></returns>
        public static Hobby MapperToHobby(this HobbyDto model)
        {
            if (model == null)
                return null;
            var retn = new Hobby()
            {
                Name = model.Name,
                Description = model.Description,
                Extend = model.Extend?.MapperToHobbyExtend(),
            };
            MapperToPartial(model, retn);
            return retn;
        }
    }
}

//generate HobbyExtend-HobbyExtendDto
namespace Biwen.AutoClassGen.TestConsole.Dtos
{
    using Biwen.AutoClassGen.TestConsole.Dtos;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;

    public partial class HobbyExtendDto
    {
        /// <inheritdoc cref = "HobbyExtend.Extend1"/>
        public string Extend1 { get; set; }
        /// <inheritdoc cref = "HobbyExtend.Extend2"/>
        public string Extend2 { get; set; }
        /// <inheritdoc cref = "HobbyExtend.Extend3"/>
        public InnerExtendDto Extend3 { get; set; }
    }
}

namespace Biwen.AutoClassGen.TestConsole.Dtos
{
    using Biwen.AutoClassGen.TestConsole.Dtos;
    using System.Linq;

    public static partial class HobbyExtendToHobbyExtendDtoExtentions
    {
        /// <summary>
        /// custom mapper
        /// </summary>
        static partial void MapperToPartial(HobbyExtend from, HobbyExtendDto to);
        /// <summary>
        /// mapper to HobbyExtendDto
        /// </summary>
        /// <returns></returns>
        public static HobbyExtendDto MapperToHobbyExtendDto(this HobbyExtend model)
        {
            if (model == null)
                return null;
            var retn = new HobbyExtendDto()
            {
                Extend1 = model.Extend1,
                Extend2 = model.Extend2,
                Extend3 = model.Extend3?.MapperToInnerExtendDto(),
            };
            MapperToPartial(model, retn);
            return retn;
        }

        /// <summary>
        /// ProjectTo HobbyExtendDto
        /// </summary>
        public static IQueryable<HobbyExtendDto> ProjectToHobbyExtendDto(this IQueryable<HobbyExtend> query)
        {
            return query.Select(model => model.MapperToHobbyExtendDto());
        }
    }

    public static partial class HobbyExtendDtoToHobbyExtendExtentions
    {
        /// <summary>
        /// custom mapper
        /// </summary>
        static partial void MapperToPartial(HobbyExtendDto from, HobbyExtend to);
        /// <summary>
        /// mapper to HobbyExtend
        /// </summary>
        /// <returns></returns>
        public static HobbyExtend MapperToHobbyExtend(this HobbyExtendDto model)
        {
            if (model == null)
                return null;
            var retn = new HobbyExtend()
            {
                Extend1 = model.Extend1,
                Extend2 = model.Extend2,
                Extend3 = model.Extend3?.MapperToInnerExtend(),
            };
            MapperToPartial(model, retn);
            return retn;
        }
    }
}

//generate InnerExtend-InnerExtendDto
namespace Biwen.AutoClassGen.TestConsole.Dtos
{
    using Biwen.AutoClassGen.TestConsole.Dtos;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;

    public partial class InnerExtendDto
    {
        /// <inheritdoc cref = "InnerExtend.InnerExtendMsg"/>
        public string InnerExtendMsg { get; set; }
    }
}

namespace Biwen.AutoClassGen.TestConsole.Dtos
{
    using Biwen.AutoClassGen.TestConsole.Dtos;
    using System.Linq;

    public static partial class InnerExtendToInnerExtendDtoExtentions
    {
        /// <summary>
        /// custom mapper
        /// </summary>
        static partial void MapperToPartial(InnerExtend from, InnerExtendDto to);
        /// <summary>
        /// mapper to InnerExtendDto
        /// </summary>
        /// <returns></returns>
        public static InnerExtendDto MapperToInnerExtendDto(this InnerExtend model)
        {
            if (model == null)
                return null;
            var retn = new InnerExtendDto()
            {
                InnerExtendMsg = model.InnerExtendMsg,
            };
            MapperToPartial(model, retn);
            return retn;
        }

        /// <summary>
        /// ProjectTo InnerExtendDto
        /// </summary>
        public static IQueryable<InnerExtendDto> ProjectToInnerExtendDto(this IQueryable<InnerExtend> query)
        {
            return query.Select(model => model.MapperToInnerExtendDto());
        }
    }

    public static partial class InnerExtendDtoToInnerExtendExtentions
    {
        /// <summary>
        /// custom mapper
        /// </summary>
        static partial void MapperToPartial(InnerExtendDto from, InnerExtend to);
        /// <summary>
        /// mapper to InnerExtend
        /// </summary>
        /// <returns></returns>
        public static InnerExtend MapperToInnerExtend(this InnerExtendDto model)
        {
            if (model == null)
                return null;
            var retn = new InnerExtend()
            {
                InnerExtendMsg = model.InnerExtendMsg,
            };
            MapperToPartial(model, retn);
            return retn;
        }
    }
}
#pragma warning restore

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationenhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions