【问题标题】:Nhibernate MySql DateTime issue c#Nhibernate MySql DateTime 问题 c#
【发布时间】:2011-12-19 12:53:24
【问题描述】:

我在尝试从 MySql 数据库请求数据时遇到了问题。

例如: 我有一个表 user_data ,其中包含很多字段,包括 user_id 是字符串,day 是日期。尝试使用手动创建的 SQL 查询请求数据:

SELECT * FROM `alt_database`.`user_data` 
where user_id = '54sdfjghwegFDqwgf' and day = '2011-10-31';  

它检索一切正常。但是尝试使用 Nhibernate 请求相同的数据:

string customer_id = "54sdfjghwegFDqwgf";
DateTime DT = DateTime.Parse("2011-10-31");
var criteria = TheSession.CreateCriteria(typeof(user_data));
criteria.Add(Restrictions.Eq("user_id", customer_id) & Restrictions.Eq("Day", day))
        .List<user_data>();

它检索到 0 条记录。

任何帮助将不胜感激。

提前致谢。

德米特里

【问题讨论】:

  • 我强烈推荐使用NHProf 来帮助使用NHibernate 调试项目。它提供了大量附加信息来帮助您发现问题。
  • 如果包含类映射会有所帮助。

标签: c# .net mysql nhibernate datetime


【解决方案1】:

感谢所有试图帮助我的人!

不幸的是,我不得不使用原始 sql 查询:使用 CreateSQLQuery,然后为每个字段添加标量。

【讨论】:

    【解决方案2】:

    这是因为 NHibernate 将时间放在查询中。您可以执行以下操作:

    criteria.Add(Restrictions.Between("Day", day, day.AddDays(1).AddSeconds(-1)));
    

    【讨论】:

      【解决方案3】:

      我认为标准部分不太正确。也没有定义天。您已经定义了 DT。

      string customer_id = "54sdfjghwegFDqwgf";   
      DateTime day = DateTime.Parse("2011-10-31");   
      var criteria = TheSession.CreateCriteria(typeof(user_data))  
        .Add(Restrictions.Eq("user_id", customer_id))  
        .Add(Restrictions.Eq("Day", day))   
        .List<user_data>();   
      

      【讨论】:

      • 不幸的是,这个 sn-p 检索到相同的结果 - 0 次命中。最有趣的是:如果我将日期更改为 2010-10-13,它将检索预期的点击量。 =)
      • 它只是基于午夜的日期吗? 2010-10-31 00:00:00 听起来这可能是@Sly 的建议
      • 最好将生成的 SQL 记录到日志文件或控制台中,这样您就可以看到它输出的查询
      • 你看...我可以使用原始 sql 检索相同的数据,但不能使用 nhibernate =(。顺便说一句,Sly 的解决方案也不起作用。将尝试保留由生成的 sql 查询休眠。
      • 那里有 user_id 和指定日期的数据吗?如果更改日期,它会按预期工作似乎很奇怪。
      猜你喜欢
      • 2013-09-13
      • 2011-03-30
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 2014-07-09
      相关资源
      最近更新 更多