1

基于 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>(无论集合包含什么)都需要从映射中排除。

有任何想法吗?

4

0 回答 0