我将virtual关键字用于EF延迟加载的某些属性。我有一种情况,当将源映射到目标时,应从AutoMapper中忽略模型中标记为virtual的所有属性。

有没有自动的方法可以实现这一目标,还是应该手动忽略每个成员?

最佳答案

您可以创建一个映射扩展名并使用它:

namespace MywebProject.Extensions.Mapping
{
    public static class IgnoreVirtualExtensions
    {
        public static IMappingExpression<TSource, TDestination>
               IgnoreAllVirtual<TSource, TDestination>(
                   this IMappingExpression<TSource, TDestination> expression)
        {
            var desType = typeof(TDestination);
            foreach (var property in desType.GetProperties().Where(p =>
                                     p.GetGetMethod().IsVirtual))
            {
                expression.ForMember(property.Name, opt => opt.Ignore());
            }

            return expression;
        }
    }
}

用法:
Mapper.CreateMap<Source,Destination>().IgnoreAllVirtual();

10-02 06:48
查看更多