我有一個應用程序女巫使用NHibernate作爲ORM。我有一個持久化類:NHibernate - 從sql函數返回複雜的對象
public class Match : IEntity
{
public virtual int ID { get; set; }
public virtual string Word { get; set; }
public virtual int WordIntervalBeginning { get; set; }
public virtual int WordIntervalEnding { get; set; }
}
,我必須在服務器端的SQL函數:
CREATE FUNCTION ftMatchTest
()
RETURNS TABLE
AS
RETURN
(
SELECT mt1.*, mt2.*,
CASE WHEN mt1.Word = mt2.Word THEN 1 ELSE 0 END AS sc
FROM
dbo.tMatchesTest mt1, dbo.tMatchesTest mt2
)
我希望能夠調用此函數,結果從它映射到下面的類
public class FResult
{
public Match Match1 { get; set; }
public Match Match2 { get; set; }
public int sc { get; set; }
}
NHibernate 3.0能做到嗎?用FluentNHibernate可以做到嗎?
在此先感謝!
已更新
我將匹配類映射到tMatchesTest表中。 tMatchesTest表
結構爲:
CREATE TABLE [dbo].[tMatchesTest](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Word] [varchar](50) NOT NULL,
[WordIntervalBeginning] [int] NOT NULL,
[WordIntervalEnding] [int] NOT NULL,
CONSTRAINT [PK_tMatchesTest] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
UPDATED2
我對我自己找到了解決辦法:
1.創建這樣
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace=" ConsoleApplication8.Domain.Entities"
assembly="ConsoleApplication8">
<resultset name="fresult-resset">
<return alias="Match1" class="Match"/>
<return alias="Match2" class="Match"/>
<return-scalar column="sc" type="int"/>
</resultset>
<sql-query name="getfresult" resultset-ref="fresult-resset">
SELECT {Match1.*}, {Match2.*},
CASE WHEN Match1.Word = Match2.Word THEN 1 ELSE 0 END sc
FROM dbo.tMatchesTest Match1, dbo.tMatchesTest Match2
</sql-query>
</hibernate-mapping>
命名查詢和執行這樣的查詢:
Session.GetNamedQuery("getfresult")
.SetResultTransformer(new AliasToBeanResultTransformer(typeof(FResult)))
.List<FResult>();
這是迄今爲止我發現的最簡單,最簡單的方式來執行任務。
你可以發佈tMatchesTest表的結構嗎? – 2011-03-05 10:44:50
我在原文中添加了此表的結構。 – StuffHappens 2011-03-05 10:49:05
是SQL函數的例子代碼?它的內容會更復雜嗎?爲什麼依靠實際查詢功能? – Jaguar 2011-03-10 14:52:40