C# AutoMapper.Mapper.Map偶尔返回具有空属性的对象

C# AutoMapper.Mapper.Map偶尔返回具有空属性的对象,c#,asp.net-mvc,entity-framework,automapper,C#,Asp.net Mvc,Entity Framework,Automapper,我在MVC/EF应用程序中使用Automapper。有时,当我启动应用程序进行调试(F5)时,AutoMapper.Mapper.Map会返回一个属性值为空的映射对象。我需要重新启动才能自行解决此问题。将应用程序部署到远程服务器时也会出现此问题。作为一种解决方法,我必须检查空属性,然后手动映射我的对象 ProductHierarchyRow mappedObj = _mapProvider.Map<VW_PROD_HIERARCHY,ProductHiera

我在MVC/EF应用程序中使用Automapper。有时,当我启动应用程序进行调试(F5)时,AutoMapper.Mapper.Map会返回一个属性值为空的映射对象。我需要重新启动才能自行解决此问题。将应用程序部署到远程服务器时也会出现此问题。作为一种解决方法,我必须检查空属性,然后手动映射我的对象

                ProductHierarchyRow mappedObj = _mapProvider.Map<VW_PROD_HIERARCHY,ProductHierarchyRow>(foundRow);
                if (String.IsNullOrEmpty(mappedObj.DepartmentId)) //Test one of the properties
                {
                    //Manually map because Automapper has failed for some reason

                    mappedObj = new ProductHierarchyRow();
                    mappedObj.MarketChannel = foundRow.MARKETCHANNEL;
                    mappedObj.BrandId = foundRow.BRAND_ID;
                    mappedObj.BrandLabel = foundRow.BRAND_LABEL;
                    mappedObj.DivisionId = foundRow.DIVISION_ID;
                    mappedObj.DivisionLabel = foundRow.DIVISION_LABEL;
                    mappedObj.DepartmentId = foundRow.DEPARTMENT_ID;
                    mappedObj.DepartmentLabel = foundRow.DEPARTMENT_LABEL;
                    mappedObj.ClassId = foundRow.CLASS_ID;
                    mappedObj.ClassLabel = foundRow.CLASS_LABEL;
                    mappedObj.SubclassId = foundRow.SUBCLASS_ID;
                    mappedObj.SubclassLabel = foundRow.SUBCLASS_LABEL;
                }
ProductHierarchyRow mappedObj=\u mapProvider.Map(foundRow);
if(String.IsNullOrEmpty(mappedObj.DepartmentId))//测试其中一个属性
{
//手动映射,因为Automapper因某些原因失败
mappedObj=newproducthierarchyrow();
mappedObj.MarketChannel=foundRow.MarketChannel;
mappedObj.BrandId=foundRow.BRAND_ID;
mappedObj.BrandLabel=foundRow.BRAND_标签;
mappedObj.DivisionId=foundRow.DIVISION\u ID;
mappedObj.DivisionLabel=foundRow.DIVISION\u标签;
mappedObj.DepartmentId=foundRow.DEPARTMENT\u ID;
mappedObj.DepartmentLabel=foundRow.DEPARTMENT\u标签;
mappedObj.ClassId=foundRow.CLASS\u ID;
mappedObj.ClassLabel=foundRow.CLASS\u标签;
mappedObj.SUBCLASS=foundRow.SUBCLASS_ID;
mappedObj.SUBCLASS标签=foundRow.SUBCLASS\u标签;
}
以下是映射接口/实现类:

public class MappingProvider : IMappingProvider
{
    public MappingProvider()
    {
        AutoMapper.Mapper.CreateMap<VW_PROD_HIERARCHY, ProductHierarchyRow>().ForAllMembers(opt => opt.Ignore());
        AutoMapper.Mapper.CreateMap<VW_PROD_HIERARCHY, ProductHierarchyRow>()
                .ForMember(x => x.MarketChannel, o => o.ResolveUsing(s => s.MARKETCHANNEL))
                .ForMember(x => x.BrandId, o => o.ResolveUsing(s => s.BRAND_ID))
                .ForMember(x => x.BrandLabel, o => o.ResolveUsing(s => s.BRAND_LABEL))
                .ForMember(x => x.DivisionId, o => o.ResolveUsing(s => s.DIVISION_ID))
                .ForMember(x => x.DivisionLabel, o => o.ResolveUsing(s => s.DIVISION_LABEL))
                .ForMember(x => x.DepartmentId, o => o.ResolveUsing(s => s.DEPARTMENT_ID))
                .ForMember(x => x.DepartmentLabel, o => o.ResolveUsing(s => s.DEPARTMENT_LABEL))
                .ForMember(x => x.ClassId, o => o.ResolveUsing(s => s.CLASS_ID))
                .ForMember(x => x.ClassLabel, o => o.ResolveUsing(s => s.CLASS_LABEL))
                .ForMember(x => x.SubclassId, o => o.ResolveUsing(s => s.SUBCLASS_ID))
                .ForMember(x => x.SubclassLabel, o => o.ResolveUsing(s => s.SUBCLASS_LABEL));

    }

    public T1 Map<T, T1>(T entry)
    {
        return AutoMapper.Mapper.Map<T, T1>(entry);
    }

    public T1 Map<T, T1>(T source, T1 dest)
    {
        return (T1)AutoMapper.Mapper.Map(source, dest, typeof(T), typeof(T1));
    }
}
公共类映射提供程序:IMappingProvider
{
公共映射提供程序()
{
AutoMapper.Mapper.CreateMap().ForAllMembers(opt=>opt.Ignore());
AutoMapper.Mapper.CreateMap()
.ForMember(x=>x.MarketChannel,o=>o.ResolveUsing(s=>s.MarketChannel))
.ForMember(x=>x.BrandId,o=>o.ResolveUsing(s=>s.BRAND_ID))
.ForMember(x=>x.BrandLabel,o=>o.ResolveUsing(s=>s.BRAND_标签))
.ForMember(x=>x.DivisionId,o=>o.ResolveUsing(s=>s.DIVISION\u ID))
.ForMember(x=>x.DivisionLabel,o=>o.ResolveUsing(s=>s.DIVISION_LABEL))
.FormMember(x=>x.DepartmentId,o=>o.ResolveUsing(s=>s.DEPARTMENT\U ID))
.FormMember(x=>x.DepartmentLabel,o=>o.ResolveUsing(s=>s.DEPARTMENT\U LABEL))
.ForMember(x=>x.ClassId,o=>o.ResolveUsing(s=>s.CLASS_ID))
.ForMember(x=>x.ClassLabel,o=>o.ResolveUsing(s=>s.CLASS_标签))
.ForMember(x=>x.SUBCLASS,o=>o.ResolveUsing(s=>s.SUBCLASS_ID))
.ForMember(x=>x.SUBCLASS标签,o=>o.ResolveUsing(s=>s.SUBCLASS_标签));
}
公共T1地图(T入口)
{
返回AutoMapper.Mapper.Map(条目);
}
公共T1地图(T源、T1目标)
{
return(T1)AutoMapper.Mapper.Map(source、dest、typeof(T)、typeof(T1));
}
}

你知道为什么会这样吗?如何排除故障的提示?提前谢谢

启动时,每个AppDomain只能调用一次CreateMap。确保在应用程序启动时调用这些。发生的情况是,您同时有两个相互竞争的线程调用CreateMap和Map。

我的怀疑也是如此。似乎是一种比赛条件。