2013-05-21 3 views
0

Я пытаюсь понять следующее поведение NHibernate и не могу.null значения в возвращаемом списке NHibernate

session.CreateCriteria<Param>() 
    .Add(Restrictions.Eq("GroupId", groupId)) 
    .Add(Restrictions.Eq("ParamId", paramId)) 
    .List<Param>() 

Эта конструкция должна возвращать коллекцию с 1 строкой базы данных (объекта). Но возвращает список с единственным нулевым элементом. Не могли бы вы предложить почему?

P.S. Отображение класса параметров имеет составной ключ.

public class Param 
{ 
    public Param() 
    { 
    } 
    public Param(string groupId, string paramId, string paramName) : this() 
    { 
     GroupId = groupId; 
     ParamId = paramId; 
     ParamName = paramName; 
    } 
    public virtual string GroupId { get; protected set; } 
    public virtual string ParamId { get; protected set; } 
    public virtual string ParamName { get; protected set; } 
    public virtual string Value { get; set; } 

    public override bool Equals(object obj){...} 
    public override int GetHashCode(){...} 
} 

public class ParamMap : ClassMap<Param> 
{ 
    public ParamMap() 
    { 
     Table("Params"); 

     CompositeId() 
      .KeyProperty(x => x.GroupId) 
      .KeyProperty(x => x.ParamId) 
      .KeyProperty(x => x.ParamName, "ParamName"); 

     Map(x => x.Value, "ParamValue"); 
    } 
} 

Этот запрос копируется из журнала базы данных. NHibernate выполняет его.

SELECT THIS_.GROUPID AS GROUPID19_0_, THIS_.PARAMID AS PARAMID19_0_, 
THIS_.PARAMNAME AS PARAMNAME19_0_, THIS_.PARAMVALUE AS PARAMVALUE19_0_ 
FROM PARAMS THIS_ WHERE THIS_.GROUPID = :1 AND THIS_.PARAMID = :2 
\ 
WorkHour,TotalHours, 
/

Возвращает 1 строка:

GroupId = "WorkHour" 
ParamId = "TotalHours" 
ParamName = (empty) 
ParamValue = YES 
+0

Не могли бы вы рассказать нам больше о классе Param и значениях в БД? – JTMon

+0

Я обновил вопрос. – Adelf

+0

пробовал без модификатора _protected_ по свойствам ключа? Кроме того, правильно ли ваши Equals и GetHashCode обрабатывают нулевое значение paramName? – jbl

ответ

0

Это была моя вина. Значение ParamName не является пустой строкой. Это пусто! Итак, это странное поведение NHibernate, но причина найдена.