Я работаю над небольшим проектом, который должен обеспечивать базовый поиск в базе данных.
В настоящее время я использую nhibernate для взаимодействия с базой данных.
В базе данных у меня есть 2 таблицы: персона и адрес. Таблица Person имеет отношение «многие к одному» с Address.
Код, который я придумал для поиска:
public IList<T> GetByParameterList(List<QueryParameter> parameterList)
{
if (parameterList == null)
{
return GetAll();
}
using (ISession session = NHibernateHelper.OpenSession())
{
ICriteria criteria = session.CreateCriteria<T>();
foreach (QueryParameter param in parameterList)
{
switch (param.Constraint)
{
case ConstraintType.Less:
criteria.Add(Expression.Lt(param.ParameterName, param.ParameterValue));
break;
case ConstraintType.More:
criteria.Add(Expression.Gt(param.ParameterName, param.ParameterValue));
break;
case ConstraintType.LessOrEqual:
criteria.Add(Expression.Le(param.ParameterName, param.ParameterValue));
break;
case ConstraintType.EqualOrMore:
criteria.Add(Expression.Ge(param.ParameterName, param.ParameterValue));
break;
case ConstraintType.Equals:
criteria.Add(Expression.Eq(param.ParameterName, param.ParameterValue));
break;
case ConstraintType.Like:
criteria.Add(Expression.Like(param.ParameterName, param.ParameterValue));
break;
}
}
try
{
IList<T> result = criteria.List<T>();
return result;
}
catch
{
//TODO: Implement some exception handling
throw;
}
}
}
Параметр запроса является вспомогательным объектом, который я использую для создания критериев и отправки его в dal, он выглядит следующим образом:
public class QueryParameter
{
public QueryParameter(string ParameterName, Object ParameterValue, ConstraintType constraintType)
{
this.ParameterName = ParameterName;
this.ParameterValue = ParameterValue;
this.Constraint = constraintType;
}
public string ParameterName
{
get;
set;
}
public Object ParameterValue
{
get;
set;
}
public ConstraintType Constraint
{
get;
set;
}
}
Теперь это работает хорошо, если я выполняю поиск, например FirstName = "John", но не тогда, когда пытаюсь задать параметр, например Street = "Some Street". Похоже, что nhibernate ищет столбец улиц в таблице Person, но не в таблице Address.
Есть идеи, как мне изменить свой код, чтобы я мог правильно выполнить поиск? Подсказки? Может быть, какие-нибудь альтернативы?
Отказ от ответственности: я своего рода нуб, поэтому, пожалуйста, будьте нежны;)
Спасибо, Денис.