J'ai la classe suivante:Nhibernate faire des mises à jour sur select?
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; }
}
et la cartographie ressemble à ceci:
<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>
J'utilise une classe Repository<T>
avec la méthode suivante (Session
est une propriété qui retourne la session en cours):
public IEnumerable<T> FindAll(DetachedCriteria criteria)
{
return criteria.GetExecutableCriteria(Session).List<T>();
}
Maintenant, lorsque je fais ce qui suit (la session est la même session utilisée dans le référentiel):L'instruction commit est présente, car j'utilise une couche de service qui valide automatiquement chaque transaction si aucune erreur ne s'est produite. Je viens écroulé ma couche de service ici pour faciliter la visualisation ..
Ma méthode ToDTOs
convertit simplement un 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();
}
Mon journal de NHibernate montre la sortie suivante:
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 ...
...
Ainsi, en sélectionnant les produits qu'il émet une instruction de mise à jour pour chaque produit retourné lorsque la session est validée, même si rien n'a été changé dans les produits.
Des idées?
Est-ce * vraiment * comment l'entité est implémentée? Je ne te crois pas. –
C'est vrai ... J'avais une liste d'ordres auxquels le produit était attaché, mais j'ai enlevé cette liste, à la fois de la classe et du mapping (comme montré ici) et c'est le même résultat .. Ma confusion est encore plus profonde par le fait que cela n'arrive pas à mes autres entités .. –