Tengo una aplicación que utiliza NHibernate como ORM. Tengo una clase persistente:NHibernate: devolver objeto complejo de la función 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; }
}
y tengo una función de SQL en el servidor:
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
)
Quiero ser capaz de llamar a esta función y asignar el resultado de la misma en la siguiente clase
public class FResult
{
public Match Match1 { get; set; }
public Match Match2 { get; set; }
public int sc { get; set; }
}
¿Es posible hacerlo con NHibernate 3.0? ¿Es posible hacerlo con FluentNHibernate?
¡Gracias de antemano!
ACTUALIZADO
I Mapa clase de ajuste en la tabla tMatchesTest.
Estructura de la tabla tMatchesTest es:
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
La solución que encontré en mi propia:
1. Crear consulta con nombre como esto
<?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>
y ejecutar la consulta como esta :
Session.GetNamedQuery("getfresult")
.SetResultTransformer(new AliasToBeanResultTransformer(typeof(FResult)))
.List<FResult>();
Esta es la forma más corta y simple que he encontrado hasta ahora para realizar la tarea.
¿Podría publicar la estructura de la tabla tMatchesTest? –
Agregué la estructura de esta tabla en la publicación original. – StuffHappens
es el código de ejemplo de la función SQL? ¿Su contenido va a ser más complejo? ¿Por qué confiar en la función para la búsqueda real? – Jaguar