问题 Fluent Nhibernate Mapping MySQL Time(6) to C# DateTime

Posted

技术标签:

【中文标题】问题 Fluent Nhibernate Mapping MySQL Time(6) to C# DateTime【英文标题】:Problems Fluent Nhibernate Mapping MySQL Time(6) to C# DateTime 【发布时间】:2013-09-13 10:17:46 【问题描述】:

我有一个具有以下架构的 mysql

Field   Type            Null    Key Default Extra
id          int(11)         NO  PRI NULL    auto_increment
Date    date            YES MUL NULL    
Time    time(6)         NO  MUL NULL    
Exch    varchar(45) YES MUL NULL    
ProdType    varchar(45) YES     NULL    
Product varchar(45) YES     NULL    
Contract    varchar(45) YES     NULL    
Direction   varchar(45) YES     NULL    
Price   decimal(10,4)   YES     NULL    
Quantity    int(11)         YES     NULL    

流利模型:

public class Trade

    public virtual int Id  get; set; 
    public virtual DateTime Date  get; set; 
    public virtual DateTime Time  get; set; 
    public virtual string Contract  get; set; 
    public virtual string Direction  get; set; 
    public virtual double Price  get; set; 
    public virtual int Quantity  get; set; 

和映射:

public TradeMap()
    
        Id(x => x.Id).Column("id");
        Map(x => x.Date).Column("Date");
        Map(x => x.Time).Column("Time").CustomType("timestamp");;
        Map(x => x.Contract).Column("Contract");
        Map(x => x.Direction).Column("Direction");
        Map(x => x.Price).Column("Price");
        Map(x => x.Quantity).Column("Quantity");
        Table("ts");
    

我正在使用以下代码测试 ORM

        DateTime dayStart = Convert.ToDateTime("11:31:00.000000");
        DateTime dayEnd = Convert.ToDateTime("11:32:00.000000");

        IQueryable<Trade> result = from ts in repo.GetList<Trade>()
                     where ts.Date == new DateTime(2013,7,1)
                        && ts.Time >= dayStart
                        && ts.Time <= dayEnd
                        && ts.Contract == "Sep13"
                    select ts;


        foreach (var l in result)
        
            DateTime k = l.Time;
        

Trade result = repo.GetList<Trade>().FirstOrDefault();

但我不断收到内部异常

"Unable to cast object of type 'System.TimeSpan' to type 'System.IConvertible'."

我尝试通过将时间映射更改为来解决此问题

Map(x => x.Time).Column("tsTime").CustomType("timestamp").CustomSqlType("TIME(6)").Nullable();

Map(x => x.Time).Column("tsTime").CustomSqlType("TIME(6)");

但没有任何效果

【问题讨论】:

对于 mysql 也是如此。我们在 oracle 中遇到了同样的问题。 NHibernate 在日期时间等方面无法正常工作。我希望他们将来会修复它。 当我们在 nhibernate 中有时间关键函数时,我们习惯于将日期和时间值标记为一天中的秒数,使用 timespan 类可以让事情变得更容易***.com/questions/463642/… 【参考方案1】:

对 DATE + TIME 使用单个字段。

【讨论】:

以上是关于问题 Fluent Nhibernate Mapping MySQL Time(6) to C# DateTime的主要内容,如果未能解决你的问题,请参考以下文章

NHibernate + Fluent NHibernate 异常

用 Fluent Nhibernate 定义 NHibernate 过滤器的语法?

如何使用 Fluent 设置 NHibernate.Burrow?

Castle Windsor 3 + Fluent NHibernate + Castle.NHibernate.Integration

Fluent 映射和 NHibernate Xml 配置

使用 Fluent NHibernate 映射泛型类