自动映射器-映射标识列与其他列给出错误找不到实体类型'ChannelTypeT'的属性'Id'

问题描述 投票:-1回答:2

我有带有自动映射器的.net core 3.0 API。

我在映射时遇到一个问题。下面我列出了我的实体。

[Table(name: "ChannelType")]
public class ChannelType : FullAuditedEntity<string>
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Required]
    [StringLength(06)]
    public override string Id { get; set; }

    public string Text { get; set; }

    public virtual ChannelTypeT ChannelTypeT { get; set; }
}

并且ChannelTypeT实体将是这样。

[Table(name: "ChannelTypeT")]
public class ChannelTypeT
{
    [StringLength(02)]
    public string Lang { get; set; }
    public string Text { get; set; }

    #region Primary Key derived from Foreign key for Config tabels        
    [Required]
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    [ForeignKey(name: "ChannelTypeId")]
    public string ChannelTypeId { get; set; }
    public virtual ChannelType ChannelType { get; set; }
    #endregion
}

现在,简单来说,这意味着当我插入一个ChannelType时,代码也应该在ChannelTypeT中插入一条新记录,其ID与ChannelTypeId相同。这是快照。

enter image description here

这是我的Dto类。

public class ChannelTypeDtoIncluding
{
    public string Id { get; set; }
    public string Text { get; set; }

    public virtual ChannelTypeTDto ChannelTypeT { get; set; }
}

public class ChannelTypeTDto
{
    public string ChannelTypeId { get; set; }
    public string Lang { get; set; }
    public string Text { get; set; }
}

我的自动映射器映射。

CreateMap<ChannelTypeT, ChannelTypeTDto>().ReverseMap();
        CreateMap<ChannelType, ChannelTypeDtoIncluding>()
            .ForMember(d => d.Id, opt => opt.MapFrom(s => s.ChannelTypeT.ChannelTypeId))
            .ForMember(d => d.Id, opt => opt.MapFrom(s => s.ChannelTypeT.Id))
            .ReverseMap();

最后是我的发布方法。

 [HttpPost("InsertIncluding")]
    public IActionResult PostIncluding([FromBody]ChannelTypeDtoIncluding model)
    {
        if (string.IsNullOrEmpty(model.Id))
            return new NotFoundResult();

        if (!ModelState.IsValid)
            return BadRequest(ModelState);

        Response<ChannelType> itemToReturn = _service.Insert(_mapper.Map<ChannelTypeDtoIncluding, ChannelType>(source: model));
        if (itemToReturn.IsSuccess == true)
            return new OkObjectResult(_mapper.Map<ChannelType, ChannelTypeDtoIncluding>(source: itemToReturn.Data));
        else
            return new ObjectResult(itemToReturn.ErrorMessage) { StatusCode = 500 };
    }

但是在此方法中,当我尝试映射模型时,它给了我错误。下面是错误说明。

找不到实体类型'ChannelTypeT'的属性'Id'。确保属性存在并且已包含在模型中。

我的映射器将把ChannelType-> ID更新为ChannelTypeT-> ChannelTypeId。我认为问题出在映射器配置,但不确定我在哪里做错。

关于此的任何想法都会有很大帮助。

c# asp.net-core automapper ef-core-3.0
2个回答
2
投票

ChannelType创建到ChannelTypeT的映射并使用ForMember指定所需的连接

CreateMap<ChannelType, ChannelTypeT>()
    .ForMember(c => c.ChannelTypeId, m => m.MapFrom(ct => ct.Id));

2
投票

这里是正在运行的演示,您可以参考

© www.soinside.com 2019 - 2024. All rights reserved.