- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在托管一个使用 AutoMapper 将某些类转换为其他类的应用程序。直到今天这一切都很好。该应用程序现已托管大约 3 个月。在此期间,我们进行了几次部署,其中应用程序已重新启动,但 IIS 没有。
应用程序不知从何而来开始失败,回顾日志我们发现这是原因:
System.NullReferenceException: Object reference not set to an instance of an object.
at AutoMapper.Configuration.<>c__DisplayClass13.<FindExplicitlyDefinedTypeMap>b__12(TypeMap x)
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
at AutoMapper.Configuration.FindExplicitlyDefinedTypeMap(Type sourceType, Type destinationType)
at AutoMapper.Configuration.CreateTypeMap(Type source, Type destination, String profileName)
at AutoMapper.Configuration.CreateMap[TSource,TDestination](String profileName)
at AutoMapper.Configuration.CreateMap[TSource,TDestination]()
at AutoMapper.Mapper.CreateMap[TSource,TDestination]()
所以我们切换到我们的备份服务器,完全没有这个问题。我们试图通过重新启动应用程序来解决问题,但没有帮助。只有重新启动 IIS 才能解决问题。
我们尝试查看源代码以找出导致此问题的原因,我们在 https://github.com/jbogard/AutoMapper/ 下载了源代码.异常好像是AutoMapper的ConfigurationStore类的这个方法引起的。
private TypeMap FindExplicitlyDefinedTypeMap(Type sourceType, Type destinationType)
{
return _typeMaps.FirstOrDefault(x => x.DestinationType == destinationType && x.SourceType == sourceType);
}
_typeMaps 在类中定义如下。
private readonly IList<TypeMap> _typeMaps = new List<TypeMap>();
如果我们检查 TypeMap,我们会看到 x.DestionationType 和 x.SourceType 引用了其他属性:
private readonly TypeInfo _destinationType;
private readonly TypeInfo _sourceType;
public Type SourceType
{
get { return _sourceType.Type; }
}
public Type DestinationType
{
get { return _destinationType.Type; }
}
看起来 _sourceType 和/或 _destionationType 突然为空!
有没有其他人遇到过这个问题和/或有没有人知道这个问题的可能原因以及我们如何才能防止这种情况在未来发生?
最佳答案
如果可以的话,当 Automapper 被告知要映射某些内容(如错误所示)为 null 时,它通常会抛出此异常。
例如,如果我们要说:
MyCustomObject myobject = null;
MyNewObject mynewobject = Mapper.Map<MyCustomObject, MyNewObject>(myobject);
我们会得到同样的错误,因为我们告诉 Automapper 从空的 MyCustomObject
中创建一个新的 MyNewObject
。
从错误消息的外观来看,问题看起来像一个空的 List
。 Automapper 需要一堆可以映射到其他对象的对象,但列表是空的。
Automapper 可能很难追踪其中的错误,因为错误将由 Automapper 抛出并且看起来像是 Automapper 问题。自然地,问题是在某处,您的代码以某种方式抛出一个空列表以进行映射。
您知道您是否有可以检查的单元测试吗?如果是这样,请检查它们的代码覆盖率(类似于 NCover )并确保正在执行所有映射代码。如果没有,请编写一些测试来练习它。
另一种方法可能是尝试在开发工作站上运行相同的操作并尝试重新创建出现错误的情况 - 它可能是现在为空的数据库表,或者一些未指定的用户输入。
您的软件中是否启用了任何日志记录,例如 Enterprise Library例如日志记录?
祝你好运:)
关于c# - AutoMapper 的 1.1 CreateMap 在长时间运行后引发 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4406985/
当我多次调用相同类型的 Mapper.CreateMap 时会发生什么? 它会重写以前的 map 吗?如果是这样,如果我尝试创建已经创建的 map ,是否可以使其抛出异常? 最佳答案 当多次为同一组源
您好,我正在尝试将 AutoMapper 添加到我的应用程序中,但我在集成中似乎遇到了一些问题。这是我到目前为止所拥有的。 为了不创建对 Automapper 的直接依赖,我为其最基本的功能创建了一个
您好,我正在尝试将 AutoMapper 添加到我的应用程序中,但我似乎在集成方面遇到了一些问题。这是我目前所拥有的。 为了不直接依赖于 Automapper,我为其最基本的功能创建了一个简单的映射:
我的对象映射要求我传递源对象和一个附加对象,以便能够适本地映射目标对象。但是,我无法确定完成该任务的方法。 public class SourceDto { public string Val
我有一个服务正在调用另一个服务。这两项服务都使用“相同的类”。这些类的名称相同,具有相同的属性,但具有不同的命名空间,因此我需要使用 AutoMapper 从一种类型映射到另一种类型。 不,这很简单,
我经常使用 AutoMapper 以模型/ View / View -模型模式将模型(域)对象映射到 ViewModel 对象,然后由我的 View 使用。 这涉及到许多“Mapper.CreateM
首先,对不起我的英语:) 我正在使用 AutoMapper 在类之间进行映射。 我有如下所示的类结构。 public class OrderDto { int Id { get; set; } }
我正在使用 Automapper (6.2.1) 来转换实体对象的层次结构: class Entity1 {} class Entity2 : Entity1 {} class Entity3 : E
这个问题在这里已经有了答案: Automapper says Mapper.Map is obsolete, global mappings? (5 个答案) 关闭 6 年前。 我使用的是 Auto
在 React Native 库中有一个类 https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/jav
我正在尝试使用 AutoMapper 而不求助于自定义映射。 我有两个对象使用相同的接口(interface)定义如下 public class Order : IOrder ... public c
在我们当前的项目中,我们在由多个线程调用的类的静态构造函数中注册映射。静态构造函数中的映射仅与该类相关。但是仍然可以同时运行多个 CreateMap 调用。此外,有时(主要是复制/过去的问题)相同的映
public IEnumerable GetNewNotifications() { var userId = User.Identity.GetUserId(); var notif
自动映射模型: public class OuterSource { public int Value { get; set; } public InnerSource Inner {
我有一个每秒更新一次的数组,我正在浏览带有映射数组的高级部分,但无法完成任务。我对 updateTarget(updatedSource, target) {} 函数内部的内容感到困惑。注释和代码笔就
本文整理了Java中org.springframework.beans.factory.config.YamlMapFactoryBean.createMap()方法的一些代码示例,展示了YamlMa
我有这两个模型: public class SiteSettingsViewModel { public decimal SubscriptionFee { get; set; } } pub
这可能是一个基本问题,但想知道我没有得到 AutoMapper.Mapper.CreateMap 方法。 我使用了错误的 AutoMapper 引用/包吗?谢谢 最佳答案 CreateMap 方法的静
这可能是一个愚蠢的问题! (n00b 到 AutoMapper 并且时间很短!) 我想使用 AutoMapper 将 EF4 实体映射到 ViewModel 类。 1)如果我打电话 CreateMap
我正在使用以下统一注册自动映射器: container .RegisterType(new PerThreadLifetimeManager(), new InjectionConstructor
我是一名优秀的程序员,十分优秀!