Я борюсь с этой проблемой:
У меня есть список объектов 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) не будет работать.
Спасибо,
Космин