Nhibernate robi aktualizacje na select?

Mam następującą klasę:

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; }
}

a mapowanie wygląda tak:

 <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>

Używam aRepository<T> klasa za pomocą następującej metody (Session to właściwość, która zwraca bieżącą sesję):

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

Teraz, gdy wykonam następujące czynności (sesja jest tą samą sesją, która jest używana w repozytorium):

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

Instrukcja zatwierdzenia jest dostępna, ponieważ używam warstwy usług, która automatycznie zatwierdza każdą transakcję, jeśli nie wystąpiły żadne błędy. Właśnie zwinęłam tutaj warstwę usługi, aby ułatwić wizualizację ..

MójToDTOs metoda po prostu konwertuje na 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();
}

Mój dziennik nhibernate pokazuje następujące dane wyjściowe:

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 ...
...

Wybierając produkty, wystawia oświadczenie o aktualizacji dla każdego produktu zwróconego w momencie zatwierdzenia sesji, mimo że w produktach nic się nie zmieniło.

Jakieś pomysły?

questionAnswers(2)

yourAnswerToTheQuestion