我有一个非常怪异的错误... 我有两个窄等式类,用于从sqlite数据库中提取数据 我在两个SQLite数据库中将日期另存为DATETIME。 我的第一个,包含了这种加载数据的方法 第二个: 第一种方法有效,但是第二种方法使我在try catch附近出现异常。 格 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我试图在内存中使用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自动映射约定添加了一个可供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
}
尝试为该列设置时间戳的CustomType
。 我认为这是节省毫秒与不节省毫秒之间的区别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.