根据SO上的一些帖子,我正在尝试为AutoMapper创建一个扩展方法,以便对于我所有的EF 4.0业务对象,类型EntityReference<T>
和{{1的所有EF相关属性从映射中排除。
我已经提出了这个代码:
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;
}
}
属性工作得很好,但对于集合来说,这并没有做它应该做的事情 - AutoMapper仍尝试映射EntityReference<T>
并在尝试此操作时崩溃。 ...
如何正确捕获所有EntityCollection<MySubEntity>
属性?我并不真正关心子类型EntityCollection<T>
是什么 - 我不想指定类型为<T>
的所有属性(无论集合包含什么)需要从映射中排除。
有什么想法吗?