基于 SO 上的许多帖子,我正在尝试为 AutoMapper 创建一个扩展方法,以便对于我的所有 EF 4.0 业务对象,所有与 EF 相关的类型属性EntityReference<T>
都EntityCollection<T>
被排除在映射之外。
我想出了这段代码:
public static class IgnoreEfPropertiesExtensions {
public static IMappingExpression<TSource, TDestination> IgnoreEfProperties<TSource, TDestination>(
this IMappingExpression<TSource, TDestination> expression) {
var sourceType = typeof (TSource);
foreach (var property in sourceType.GetProperties()) {
// exclude all "EntityReference" and "EntityReference<T>" properties
if (property.PropertyType == typeof(EntityReference) ||
property.PropertyType.IsSubclassOf(typeof(EntityReference)))
{
expression.ForMember(property.Name, opt => opt.Ignore());
}
// exclude all "EntityCollection<T>" properties
if (property.PropertyType == typeof(EntityCollection<>))
{
expression.ForMember(property.Name, opt => opt.Ignore());
}
}
return expression;
}
}
但不知何故,虽然它的属性工作得很好EntityReference<T>
,但对于集合来说,这并没有做它应该做的事情 - AutoMapper 仍然尝试映射EntityCollection<MySubEntity>
并在尝试这个时崩溃......
如何正确捕获所有EntityCollection<T>
属性?我并不真正关心子类型<T>
是什么——我不想指定所有类型的属性EntityCollection<T>
(无论集合包含什么)都需要从映射中排除。
有任何想法吗?