问题 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