代码之家  ›  专栏  ›  技术社区  ›  Joachim Kerschbaumer

Nhibernate日期时间问题

  •  2
  • Joachim Kerschbaumer  · 技术社区  · 16 年前

    我现在遇到了一个小问题。我正在使用nhibernate,将大约40个实体映射到sql server数据库。但是,由于性能原因,有些操作是通过存储过程完成的。 我有一个接受3个参数的存储过程。一个实体ID和两个日期时间。

    现在,当我有一个像2008年12月10日这样的约会,Nhibernate会

    '10.12.2008 00:00:00.000' 
    

    摆脱它。(德国文化) 当我手动将日期时间文本更改为

    '2008-12-10 00:00:00.000'
    

    以“正常”方式使用会话或使用NHibernate.linq时,我没有遇到这个问题。仅当使用sql查询执行存储过程时。

    有没有办法手动克服NHibernate将日期时间对象转换为文本表示的方式?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Jon Skeet    16 年前

    NHibernate根本不应该将日期时间转换为它们的文本表示形式,IMO-它应该要求数据库驱动程序以它想要的任何形式传递该日期时间。

    存储过程是否声明为接收参数 DateTimes(或任何SQL类型)或varchar?如果声明为接收日期时间,并且NHibernate知道,那么 应该

        2
  •  1
  •   Joachim Kerschbaumer    16 年前

    我将带有.SetDateTime(名称,datetimeValue)的datetimes传递给IQuery,因此我认为nhibernate应该处理它。存储过程需要DateTime参数。 当我打开show_sql时,我刚刚看到了这个文本表示

        3
  •  0
  •   Andrew McFall III Andrew McFall III    15 年前

    我在一个被传递到CLR存储过程中的单个DateTime中看到了同样的情况。我的也是多参数的。我也试过把它当作一个字符串,不管我做什么,我都会出错。以下是映射文件中的代码:

    " exec spGetRentRollByDate:@propertyID:@reportDate "

    存储过程首先在给定的表中查找结果集,如果它不在那里,它会触发另一个函数来创建一个结果集,并返回该结果集。