Automapper и NHibernate ленивая загрузка - PullRequest
4 голосов
/ 04 декабря 2011

Я борюсь с этой проблемой:

У меня есть список объектов NHibernate под названием «Проект». Эти объекты содержат ленивый список «Филиалов». Я пытаюсь передать список проектов службе WCF, поэтому использую AutoMapper для преобразования их в плоские объекты.

Проблема в том, что даже если целевые объекты с именем «ProjectContract» не содержат список ветвей, Automapper по-прежнему вызывает эту коллекцию, и в базу данных поступает множество запросов, потому что NHibernate запускает отложенную загрузку и загружает ветви. Коллекция для каждого проекта.

Вот классы и отображение:

    public class Project
    {
     public virtual int ID
     {
        get;
        set;
     }

     public virtual string Name { get; set; }
     public virtual string Description { get; set; }

     public virtual IList<Branch> Branches { get; set; }
    }

  [DataContract]
  public class ProjectContract
  {
    [DataMember]
    public virtual int ID
    {
        get;
        set;
    }

    [DataMember]
    public virtual string Name { get; set; }

    [DataMember]
    public virtual string Description { get; set; }
  }

  public class ProjectMappings : Profile
  {
    protected override void Configure()
    {
        Mapper.CreateMap<Project, ProjectContract>();
    }
  }

У меня такой вопрос: есть ли способ сказать AutoMapper, чтобы он не касался коллекции "Ветви", потому что я не забочусь об этом, и это прокси, который вызовет много вызовов базы данных?

Я временно исправил это с помощью MaxDepth (0), но есть другие сущности, где у меня есть коллекции, которые я хочу перенести, и коллекции, к которым я не хочу прикасаться, например, эта. В этом случае MaxDepth (0) не будет работать.

Спасибо, Космин

1 Ответ

2 голосов
/ 04 декабря 2011

Да, функция игнорирования AutoMapper.

Mapper.CreateMap<Source, Destination>()
    .ForMember(dest => dest.SomeValuefff, opt => opt.Ignore());
...