Asp.net 实体映射问题

Asp.net 实体映射问题,asp.net,automapper,Asp.net,Automapper,触发post时,它不会先保存用户名和姓氏。我有一个user类,它继承自identityuser类,并在代码段中声明了两个属性first和last name。但问题是,当我将post添加到repo时,它不会保存用户名,而是显示空值,这会引发异常 我不知道如何映射,以便将用户名保存在数据库中 public abstract class AuditableEntity { [Required] public string Title { get; s

触发post时,它不会先保存用户名和姓氏。我有一个user类,它继承自identityuser类,并在代码段中声明了两个属性first和last name。但问题是,当我将post添加到repo时,它不会保存用户名,而是显示空值,这会引发异常

我不知道如何映射,以便将用户名保存在数据库中

 public abstract class AuditableEntity
 {
            [Required]
            public string Title { get; set; }
            [Required]
            public string Description { get; set; }
            public DateTime PostCreatedDate { get; set; }
            [Required]
            public User User { get; set; }  
        }

   public class TechPost : AuditableEntity
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }


    }   

    public class User : IdentityUser
    {
        [Required]
        public string FirstName { get; set; }
        [Required]
        public string LastName { get; set; }


    }
    public class TechPostCreation
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Title { get; set; }
        public DateTime PostCreatedDate { get; set; }
        public string Description { get; set; }
    }

    [HttpPost()]
    public IActionResult CreatePost([FromBody] TechPostCreation techCreatePost)
    {
        if (techCreatePost == null)
        {
            return BadRequest();
        }
        var techPostEntity = _mapper.Map<TechPost>(techCreatePost);
        _repo.AddTechBlogPost(techPostEntity);

        if (!_repo.Save())
        {
            return StatusCode(500, "A problem happend and could handle your request");
        }

        var techPostReturn = _mapper.Map<TechPostViewModel>(techPostEntity);

        return CreatedAtRoute("GetTechPost", new { id = techPostReturn.Id },
                techPostReturn);

    }

    public RepoMapping()
    {
        CreateMap<TechPost, TechPostViewModel>()
                 .ForMember(dest => dest.Name, opt => opt.MapFrom(src =>
                   $"{src.User.FirstName} {src.User.LastName}"));

        CreateMap<TravelPost, TravelPostViewModel>()
               .ForMember(dest => dest.Name, opt => opt.MapFrom(src =>
                   $"{src.User.FirstName} {src.User.LastName}"));

        CreateMap<TechPostCreation, TechPost>();

    }
公共抽象类AuditableEntity
{
[必需]
公共字符串标题{get;set;}
[必需]
公共字符串说明{get;set;}
公共日期时间后创建日期{get;set;}
[必需]
公共用户{get;set;}
}
公共类TechPost:AuditableEntity
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共Guid Id{get;set;}
}   
公共类用户:IdentityUser
{
[必需]
公共字符串名{get;set;}
[必需]
公共字符串LastName{get;set;}
}
公共类TechPostCreation
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串标题{get;set;}
公共日期时间后创建日期{get;set;}
公共字符串说明{get;set;}
}
[HttpPost()]
公共IActionResult CreatePost([FromBody]TechPostCreation techCreatePost)
{
如果(techCreatePost==null)
{
返回请求();
}
var techpostnity=_mapper.Map(techCreatePost);
_回购AddTechBlogPost(techPostEntity);
如果(!\u repo.Save())
{
返回状态码(500,“出现问题,可以处理您的请求”);
}
var techPostReturn=_mapper.Map(techPostEntity);
返回CreatedAtRoute(“GetTechPost”,new{id=techPostReturn.id},
techPostReturn);
}
公共映射()
{
CreateMap()
.ForMember(dest=>dest.Name,opt=>opt.MapFrom(src=>
$“{src.User.FirstName}{src.User.LastName}”);
CreateMap()
.ForMember(dest=>dest.Name,opt=>opt.MapFrom(src=>
$“{src.User.FirstName}{src.User.LastName}”);
CreateMap();
}
此行:

var techPostEntity = _mapper.Map<TechPost>(techCreatePost);

此外,我不确定您的回购协议正在做什么,但您可能需要在流程的某个时刻使用UserManager检索或创建
用户

如果这些值不能从视图到控制器,那么这听起来更像是一个模型绑定问题。在视图和控制器帖子中显示名称字段。绑定没有任何问题,因为当触发my POST时,它会绑定TechPostCreation类中声明的所有属性,但当它尝试映射时,它会继承抽象类AuditableEntity。问题开始于“var techpostnity=_mapper.Map(techCreatePost)”,它不保存用户名。我不知道这是AutoMapper投影或其他方面的问题。我通过邮递员发布值:-{“firstName”:“x”,“lastName”:“y”,“postCreatedDate”,“今天的日期”,“title”:“anything”,“description”:“story”}
CreateMap<TechPostCreation, TechPost>();
CreateMap<TechPostCreation, TechPost>()
    .ForMember(dest => dest.User.FirstName, opt => opt.MapFrom(src => src.FirstName))
    .ForMember(dest => dest.User.LastName, opt => opt.MapFrom(src => src.LastName));