2010-12-15 38 views
1

我有一个数据库视图(Sql Server 2005),它有一个列持续时间(EndDate - StartDate),我希望它被映射到.NET中的TimeSpan属性。用NHibernate映射持续时间

到目前为止,我最好的猜测是将其转换的视图中的一个int,像这样:

DATEDIFF(ms, StartDate, EndDate) * 10000 AS Duration 

...但似乎一个丑陋的解决方案给我。

这样做的最好方法是什么?

编辑: 我也使用公式尝试:

<property name="Duration" formula="EndDate - StartDate" type="timespan" /> 

...但也产生一个错误(无效的从“日期时间”到“的Int64”投),这样就不会增加值有。

+0

呢'公式=“DATEIFF(‘毫秒’,结束日期,BEGINDATE)* 1000”'工作? – Firo 2012-03-06 16:44:22

回答

1

不是你问题的确切答案,但是......我会在我的nhibernate类中执行差异。

myclass.cs

public virtual DateTime dstart {get;set;} 
public virtual DateTime dend {get;set;} 

// This property not being part oh nhibernate mapping 
public TimeSpan MyDifference 
{ 
    get {return dend.Subtract(dstart); 
} 

这样,你不超载进行选择时,执行innecesary substracts的RDBMS,和你做只在需要时计算。它不是映射的属性,也不需要(只能读取)。 MyDifference可以用来和nowone可以告诉关心或谁或如何使计算

希望这有助于

+0

我需要它们在概览网格中显示。这样,我不能以通用的方式对持续时间栏进行排序,所以对我来说没有选择... – Koen 2010-12-15 15:57:22

+0

你确定吗?我不明白为什么不能 – 2010-12-15 15:59:50

+0

因为排序应该由Sql Server来处理,而不是在内存中加载的对象(纯效率)。我们也做分页,所以我们首先需要对数据进行排序,然后抓取适当的页面。如果我们要在内存中对持续时间列进行排序,那么我们必须将整个结果集加载到内存中,然后对其进行排序,然后从内存中抓取页面。这不是有效的... – Koen 2010-12-16 10:19:20