Nhibernate fazendo atualizações no select?

Eu tenho a seguinte classe:

public class Product
{
  public virtual Guid Id { get; set; }
  public virtual string Name { get; set; }
  public virtual Decimal PricePerMonth { get; set; }
  public virtual BillingInterval DefaultBillingInterval { get; set; }
  public virtual string AdditionalInfo { get; set; }
}

e o mapeamento é assim:

 <class name="Product" table="Products">
    <id name="Id" column="ProductId">
      <generator class="guid.comb"/>
    </id>
    <property name="Name" column="ProductName" not-null="true" type="String" />
    <property name="PricePerMonth" column="PricePerMonth" not-null="true" type="Decimal" />
    <property name="DefaultBillingInterval" type="int" not-null="true" />
    <property name="AdditionalInfo" type="string" not-null="false" />
</class>

Eu uso umRepository<T> classe com o seguinte método (Session é uma propriedade que retorna a sessão atual):

public IEnumerable<T> FindAll(DetachedCriteria criteria)
{
  return criteria.GetExecutableCriteria(Session).List<T>();
}

Agora, quando eu faço o seguinte (a sessão é a mesma sessão usada no repositório):

IEnumerable<ProductDTO> productDTOs = null;
using(ITransaction tx = session.BeginTransaction(IsolationLevel.ReadCommitted))
{
    var products = repository.FindAll(new DetachedCriteria.For<Product>().Add(Restrictions.Like("Name", "Some Product%")));
    productDTOs = ToDTOs(products);
    tx.Commit();
}
// Do stuff with DTO's

A instrução de confirmação está lá, porque eu uso uma camada de serviço que consolida automaticamente todas as transações se nenhum erro ocorrer. Acabei de recolher minha camada de serviço aqui para facilitar a visualização.

MinhasToDTOs método simplesmente converte para um DTO:

private IEnumerable<ProductDTO> ToDTO(IEnumerable<Product> products)
{
  return products.Select(x => new ProductDTO()
    {
      Id = x.Id,
      Name = x.Name,
      PricePerMonth = x.PricePerMonth,
      AdditionalInfo = x.AdditionalInfo
    }).ToList();
}

Meu log nhibernate mostra a seguinte saída:

2010-01-04 19:13:11,140 [4] DEBUG NHibernate.SQL - SELECT ... From Products ...
2010-01-04 19:13:11,237 [4] DEBUG NHibernate.SQL - UPDATE Products ...
2010-01-04 19:13:11,548 [4] DEBUG NHibernate.SQL - UPDATE Products ...
...

Portanto, ao selecionar os produtos, ele emite uma instrução de atualização para cada produto retornado quando a sessão é confirmada, mesmo que nada tenha sido alterado nos produtos.

Alguma ideia?

questionAnswers(2)

yourAnswerToTheQuestion