Я пытаюсь понять следующее поведение 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
Не могли бы вы рассказать нам больше о классе Param и значениях в БД? – JTMon
Я обновил вопрос. – Adelf
пробовал без модификатора _protected_ по свойствам ключа? Кроме того, правильно ли ваши Equals и GetHashCode обрабатывают нулевое значение paramName? – jbl