Я пытаюсь запустить некоторые модульные тесты в моем приложении, используя SQLite в памяти, но у меня возникла странная проблема:
У меня два запроса. Результатом первого является дата самого последнего прайс-листа для данного имени списка, и это значение DateTime
используется во втором запросе для получения самых последних цен. Проблема в том, что второй запрос не возвращает результатов.
Есть идеи, что может пойти не так в фоновом режиме?
var effective = DbSession.Current.CreateCriteria<ItemPrice>()
.SetProjection(Projections.Max("Effective"))
.Add(Restrictions.Le("Effective", workDate))
.CreateCriteria("PriceList")
.Add(Restrictions.Eq("ListName", listName))
.Add(Restrictions.Eq("Active", true))
.UniqueResult<DateTime>();
return DbSession.Current.CreateCriteria<ItemPrice>()
.Add(Restrictions.Eq("Effective", effective))
.CreateCriteria("PriceList")
.Add(Restrictions.Eq("ListName", listName))
.Add(Restrictions.Eq("Active", true))
.List<ItemPrice>();
Результат: Завершена реализация пользовательского IUserType для хранения DateTime в виде строки и добавлено соглашение об использовании Fluent Automapping для DateTime
его использования (включено ниже):
class SQLiteDateTime : IUserType
{
#region IUserType Members
public object Assemble(object cached, object owner)
{
return cached;
}
public object DeepCopy(object value)
{
var dt = (DateTime) value;
return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second);
}
public object Disassemble(object value)
{
return String.Format("{0:yyyy'-'MM'-'dd' 'HH':'mm':'ss.fff}", value);
}
public new bool Equals(object x, object y)
{
return x.Equals(y);
}
public int GetHashCode(object x)
{
return x.GetHashCode();
}
public bool IsMutable
{
get { return false; }
}
public object NullSafeGet(IDataReader rs, string[] names, object owner)
{
string dateString = (string)NHibernateUtil.String.NullSafeGet(rs, names[0]);
DateTime result = DateTime.ParseExact(dateString, "yyyy'-'MM'-'dd' 'HH':'mm':'ss.fff", CultureInfo.InvariantCulture.DateTimeFormat);
return result;
}
public void NullSafeSet(IDbCommand cmd, object value, int index)
{
if (value == null)
{
NHibernateUtil.String.NullSafeSet(cmd, null, index);
return;
}
value = Disassemble(value);
NHibernateUtil.String.NullSafeSet(cmd, value, index);
}
public object Replace(object original, object target, object owner)
{
return original;
}
public Type ReturnedType
{
get { return typeof (DateTime); }
}
public NHibernate.SqlTypes.SqlType[] SqlTypes
{
get {
var types = new SqlType[1];
types[0] = new SqlType(DbType.String);
return types;
}
}
#endregion
}