2010-12-08 6 views
0

J'ai une situation dans laquelle une de mes tables est auto-mappée sur elle-même. La clé primaire d'une ligne (Parent) peut être utilisée comme clé étrangère à l'autre ligne (Child) et cette colonne de clé étrangère contient null pour les lignes qui n'ont pas de parent. Quelque chose comme ceci:Récupération d'enregistrements avec une valeur nulle - nhibernate fluide

table: Settings_LocationType 

++++++++++++++++++++++++++++++++++++++++++++++++ 
LocationID | Name  | ParentLocationId 
++++++++++++++++++++++++++++++++++++++++++++++++ 
1   Parent 1 null 
2   Child 1 1 
3   Child 2 1 
4   Parent 2 null 

Modèle: LocationType

public class LocationType 
{ 
     public virtual long LocationTypeId { get; set; } 
     public virtual string Name { get; set; } 
     public virtual LocationType ParentLocationType { get; set; } 
     public virtual IList<LocationType> LocationTypes { get; set; } 

     public LocationType() 
     { 
      LocationTypes = new List<LocationType>();   
     } 
} 

Cartographie: LocationTypeMap

public class LocationTypeMap : ClassMap<LocationType> 
    { 
     public LocationTypeMap() 
     { 
      Table("Setting_LocationType"); 
      Id(x => x.LocationTypeId).Column("LocationId").GeneratedBy.Sequence("location_type_seq"); 
      Map(x => x.ShortName, "Name").Length(15).Not.Nullable(); 
      References<LocationType>(x => x.ParentLocationType).LazyLoad().Nullable();    
      HasMany<LocationType>(x => x.LocationTypes).AsBag().KeyColumn("ParentLocationId").KeyNullable().LazyLoad().Inverse().Cascade.SaveUpdate(); 
     } 
    } 

Maintenant, j'ai un problème à récupérer les lignes qui contiennent NULL (ou dire ne sont pas enfant) dans le champ PatentLocationType. J'ai essayé passer null comme ça repo.Get("ParentLocationType.LocationTypeId", null);, mais cela n'a pas fonctionné, mais a jeté object reference is not set to an instance error.

Répondre

0

OK, je l'ai résolu à l'aide Expression.IsNull au lieu de Expression.Eq lors de l'interrogation pour un tel LocationType

0

Avez-vous essayé:

repo.Get ("ParentLocationType", null) 
+0

oui je l'ai fait , cela ne fonctionnait pas non plus mais je pense que je sais pourquoi: regardez la requête SQL qu'il génère "SELECT LocationId, Nom, ParentLocationId FROM Settings_LocationType WHERE ParentLocationId = null". Je pense qu'il peut être résolu si certains comment je le fais pour remplacer "= null" par "est nul". Une idée de comment faire cela? – Waqas

+0

ok, je l'ai résolu en utilisant Expression.IsNull au lieu d'Expression.Eq – Waqas

Questions connexes