2010-05-20 5 views
1

Je n'aime pas l'idée de chargement proxy et paresseux. Je n'ai pas besoin de ça. Je veux du pur POCO. Et je veux contrôler les associations de chargement explicitement quand j'en ai besoin.Ne pas charger les associations sans proxy dans NHibernate

Voici entité

public class Post 
{ 
public long Id { get; set; } 
public long OwnerId { get; set; } 
public string Content { get; set; } 

public User Owner { get; set; } 
} 

et cartographie

<class name="Post"> 
    <id name="Id" /> 
    <property name="OwnerId" /> 
    <property name="Content" /> 
    <many-to-one name="Owner" column="OwnerId" /> 
</class> 

Cependant, si je précise lazy = "false" dans le mapping, le propriétaire est toujours très tiré par les cheveux. Je ne peux pas enlever beaucoup à une cartographie parce que désactive également le chargement explicite ou une requête comme

from x in session.Query<Post>() 
where x.Owner.Title == "hello" 
select x; 

I spécifié lazy = « true » et définir la propriété de use_proxy_validator false. Mais aussi les charges avides propriétaire.

Existe-t-il un moyen de charger uniquement l'entité Post?

Répondre

0

Définir la classe User à lazy = false sur la cartographie

<class name="User" table="Users" lazy="false"> 
+0

Aucun effet. Charges toujours désireuses Propriétaire. – Alice

0

Retirez cette propriété <property name="OwnerId" /> ... pour obtenir l'identifiant du propriétaire, vous pouvez utilisez Owner.Id. Cela ne déclenchera pas une charge paresseuse. Le propriétaire ne sera chargé que si vous frappez une propriété autre que l'identifiant. Pour en faire un POCO plat/simple, vous pouvez utiliser des projections et ResultTransformers.

Davy Brion - Must Everything be Virtual with NHibernate

+0

Si je ne rends pas tous les membres virtuels, toutes les associations sont impatientes, quel que soit le paramètre de chargement paresseux dans le mappage. Je veux charger seulement l'entité Publier sans mettre mon membre virtuel. – Alice

Questions connexes