首页 > 解决方案 > 如何将 Automapper 与 Object in Object 一起使用

问题描述

我想映射两种类型的对象,但我没有找到方法。

用户等级:

public partial class TUser
    {
        [Key]
        [Column("id")]
        public int Id { get; set; }
        [Column("login")]
        [StringLength(50)]
        public string Login { get; set; }
        [Column("password")]
        [StringLength(50)]
        public string Password { get; set; }
        [Column("role")]
        [StringLength(50)]
        public string Role { get; set; }
        [Column("isDeleted")]
        public bool? IsDeleted { get; set; }
        [Column("avatarUrl")]
        [StringLength(50)]
        public string AvatarUrl { get; set; }
        [Column("iso")]
        [StringLength(2)]
        public string Iso { get; set; }
        [Column("lastLogonDate", TypeName = "datetime")]
        public DateTime? LastLogonDate { get; set; }
        [Column("createdDate", TypeName = "datetime")]
        public DateTime? CreatedDate { get; set; }
        [Column("lastUpdatedDate", TypeName = "datetime")]
        public DateTime? LastUpdatedDate { get; set; }
        public byte[] PasswordHash { get; set; }
        public byte[] PasswordSalt { get; set; }

        [InverseProperty("IdNavigation")]
        public virtual TWorker TWorker { get; set; }
    }

UserForLogin 类:

public class UserForLogin
    {
        
        public int Id { get; set; }       
        public string Login { get; set; }      
        public string Role { get; set; }   
        public string AvatarUrl { get; set; }       
        public string Iso { get; set; }      
        public TWorker TWorker { get; set; }
    }

TWorker 类:

public partial class TWorker
    {
        public TWorker()
        {
            TWorkerToWorkType = new HashSet<TWorkerToWorkType>();
            TrEventToWorker = new HashSet<TrEventToWorker>();
            TrWorkerToWorkerCategory = new HashSet<TrWorkerToWorkerCategory>();
        }

        [Key]
        [Column("id")]
        public int Id { get; set; }
        [Column("lastname")]
        [StringLength(50)]
        public string Lastname { get; set; }
        [Column("firstname")]
        [StringLength(50)]
        public string Firstname { get; set; }
        [Column("email")]
        [StringLength(50)]
        public string Email { get; set; }
        [Column("phone")]
        [StringLength(50)]
        public string Phone { get; set; }
        [Column("address")]
        [StringLength(50)]
        public string Address { get; set; }
        [Column("postcode")]
        [StringLength(50)]
        public string Postcode { get; set; }
        [Column("locality")]
        [StringLength(50)]
        public string Locality { get; set; }
        [Column("workerCategoryKey")]
        public int? WorkerCategoryKey { get; set; }
        [Column("sexe")]
        [StringLength(50)]
        public string Sexe { get; set; }

        [ForeignKey(nameof(Id))]
        [InverseProperty(nameof(TUser.TWorker))]
        public virtual TUser IdNavigation { get; set; }
        [InverseProperty("WorkerKeyNavigation")]
        public virtual ICollection<TWorkerToWorkType> TWorkerToWorkType { get; set; }
        [InverseProperty("WorkerKeyNavigation")]
        public virtual ICollection<TrEventToWorker> TrEventToWorker { get; set; }
        [InverseProperty("WorkerKeyNavigation")]
        public virtual ICollection<TrWorkerToWorkerCategory> TrWorkerToWorkerCategory { get; set; }
    }

AutoMapperProfiles 类:


 public AutoMapperProfiles()
        {
            CreateMap<TUser, UserForLogin>()
                .ForMember(
                    dest => dest.TWorker,
                    opt => opt.MapFrom(src => src.TWorker)
                );                         
        }

但是 TWorker 总是为空,我找不到我做错了什么?如果我只使用 TUser 来返回没有 Automapper 代码的对象,则 TWorker 包含我想要的值。

标签: c#automapper

解决方案


您只需要为 subObject 实现地图,autoMapper 就会为您处理它。准确地说,如果你将一个属性映射到另一个具有不同类型的属性,autoMapper 会尝试找到对应的映射。


推荐阅读