2010-12-08 4 views
0

У меня ситуация, когда одна из моих таблиц самонастраивается сама по себе. Первичный ключ одной строки (родительский) может использоваться как внешний ключ для другой строки (дочерний элемент), а этот столбец внешнего ключа содержит null для таких строк, у которых нет родителя. Что-то вроде этого:Извлечение записей с нулевым значением - свободно nhibernate

table: Settings_LocationType 

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

Модель: 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>();   
     } 
} 

Mapping: 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(); 
     } 
    } 

Теперь у меня возникли проблемы в получении этих строк, которые содержат NULL (или сказать, не child) в поле PatentLocationType. Я попытался прохождения нуль как этот repo.Get("ParentLocationType.LocationTypeId", null); но не работал, но бросил object reference is not set to an instance error.

ответ

0

ОК, я решил его с помощью Expression.IsNull вместо Expression.Eq при запросе такого LocationType

0

Вы пробовали:

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

да я сделал , он тоже не работал, но я думаю, что знаю, почему: посмотрите на sql-запрос, который он генерирует «SELECT LocationId, Name, ParentLocationId FROM Settings_LocationType WHERE ParentLocationId = null». Я думаю, что это можно решить, если кто-то, как я заставляю его заменить «= null» на «is null». есть идеи как это сделать? – Waqas 2010-12-08 11:07:39

Смежные вопросы