Asp.net 实体映射问题
触发post时,它不会先保存用户名和姓氏。我有一个user类,它继承自identityuser类,并在代码段中声明了两个属性first和last name。但问题是,当我将post添加到repo时,它不会保存用户名,而是显示空值,这会引发异常 我不知道如何映射,以便将用户名保存在数据库中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
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));