我有一个具有Name属性的User实体,我需要将其链接回DTO中的三个基于Id的属性。
用户实体
public string Name { get; set; }
public string SSN { get; set; }
相册实体
public string Title { get; set; }
public int Artist { get; set; } // <-- this ties to User.Id
public int Producer { get; set; } // <-- this ties to User.Id
public int Designer { get; set; } // <-- this ties to User.Id
public User User {get; set; }
AlbumDTO
public string Title { get; set; }
public int Artist { get; set; } // <-- this ties to User.Id
public int Producer { get; set; } // <-- this ties to User.Id
public int Designer { get; set; } // <-- this ties to User.Id
public string ArtistName { get; set; } // <-- need this to be User.Name
public string ProducerName { get; set; } // <-- need this to be User.Name
public string DesignerName { get; set; } // <-- need this to be User.Name
我正在尝试将其映射为:
Mapper.CreateMap<Album, AlbumDto>()
.ForMember(dest => dest.ArtistName , opt => opt.MapFrom(s => s.User.Name));
但是这只会引发映射错误(“无法找到列'User_Id'”)。
通过将AlbumDto.Artist与User.Id相匹配,使用User.Name排列AlbumDto.ArtistName的正确语法是什么?
答案 0 :(得分:0)
该代码适合我。我正在使用Automapper 3.3.0
你也可以写一个Test并使用Mapper.AssertConfigurationIsValid();在CreateMap之后,确保创建映射时没有例外。
答案 1 :(得分:0)
我最终选择了不同的路线并跳过了我试图写的自动码代码。
以下是新实体和DTO的结果:
用户实体
public User() //<-- new code
{
Albums = new List<Album>();
}
public string Name { get; set; }
public string SSN { get; set; }
public virtual ICollection<Album> Albums { get; set; } //<-- new code
相册实体
public string Title { get; set; }
public int Artist { get; set; } // <-- this ties to User.Id
public int Producer { get; set; } // <-- this ties to User.Id
public int Designer { get; set; } // <-- this ties to User.Id
public User ArtistUser {get; set; } //<-- new code
dbContext中的映射OnModelCreating()
modelBuilder.Entity<Album>().HasOptional(t => t.ArtistUser)
.WithMany(t => t.Albums)
.HasForeignKey(d => d.Artist);
相册DTO
public string Title { get; set; }
public int Artist { get; set; } // <-- this ties to User.Id
public int Producer { get; set; } // <-- this ties to User.Id
public int Designer { get; set; } // <-- this ties to User.Id
public string ArtistUserName { get; set; } // <-- new code gets Artist Name from User.Name