Par*_*osh 53 c# asp.net automapper
我们正在使用Automapper进行项目,并且似乎随机获得以下错误:
AutoMapper.AutoMapperConfigurationException:找到未映射的成员.查看下面的类型和成员.添加自定义映射表达式,忽略,添加自定义解析程序或修改源/目标类型
代码在几个月内没有改变.我收到错误,刷新,错误消失,页面工作正常.我正在使用
Mapper.AssertConfigurationIsValid();
Run Code Online (Sandbox Code Playgroud)
不知道为什么它抱怨映射不好然后刷新再次没问题,有没有人碰到这个?调试没有帮助,因为它是随机的,有时没有错误,然后其他日子它将在网站的某个地方弹出,回到它并且没关系.错误也出现在随机页面上,而不是相同的页面,而不是相同的映射.
Mic*_*rly 63
当您尝试映射未创建映射配置的对象时,会出现此问题.你需要记住的是,它不一定是你想要映射的特定对象; 但其中一个导航属性.
比如说你有一个Car.cs想要映射到的地方CarDTO.cs
该Car.cs如下所示:
cfg.ValidateInlineMaps = false;
Run Code Online (Sandbox Code Playgroud)
你的DTO看起来是一样的,但有一个参考EngineDTO:
public class Car
{
public string Color { get; set; }
public Engine Engine { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您配置了这样的映射:
public class CarDTO
{
public string Color { get; set; }
public EngineDTO Engine { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
一切都很好看,对吧?但是,在你的EngineDTO,你可能有一个导航属性,让我们说:
Mapper.CreateMap<DTO.CarDTO, Data.Model.Car>();
Mapper.CreateMap<Data.Model.Car, DTO.CarDTO>();
Mapper.CreateMap<DTO.EngineDTO, Data.Model.Engine>();
Mapper.CreateMap<Data.Model.Engine, DTO.EngineDTO>();
Run Code Online (Sandbox Code Playgroud)
因此,虽然Automapper是映射Engine到EngineDTO,但它也尝试映射PartDTO,但由于您忘记在其中声明映射global.asax,您会收到错误:
AutoMapper.AutoMapperConfigurationException:找到未映射的成员.查看下面的类型和成员.添加自定义映射表达式,忽略,添加自定义解析程序或修改源/目标类型
如果您不想在类上映射某些属性,可以使用Ignore:
public class EngineDTO
{
public List<PartDTO> Parts { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
编辑:
对于更强大的AutoMapper配置,我建议您使用映射配置文件,而不是直接声明映射Global.asax.这是一个例子:
轮廓:
Mapper.CreateMap<Engine, EngineDTO>()
.ForMember(x => x.Parts, opt => opt.Ignore());
Run Code Online (Sandbox Code Playgroud)
Global.asax中:
public class CarProfile : Profile
{
public CarProfile ()
{
CreateMap<Car, CarDTO>();
}
}
Run Code Online (Sandbox Code Playgroud)
mrT*_*kay 16
这是关于验证.
cfg.ValidateInlineMaps = false;
Run Code Online (Sandbox Code Playgroud)
应该够了
| 归档时间: |
|
| 查看次数: |
56524 次 |
| 最近记录: |