Fluent NHibernate在没有hbm.xml映射的情况下查询存储过程

rah*_*hul 19 stored-procedures fluent-nhibernate-mapping

有没有办法在不创建hbm.xml文件映射的情况下在Fluent Nhibernate中查询存储过程?

小智 27

我假设你使用标准

Session.GetNamedQuery(....
Run Code Online (Sandbox Code Playgroud)

相反,你可以使用

var result = Session.CreateSQLQuery("exec MyStoredProc :pUserId, :pIsLocked")
                    .AddEntity(typeof(MyDomainObject))
                    .SetParameter("pUserId", userId)
                    .SetParameter("pIsLocked", isLocked)
                    .List<MyDomainObject>();
Run Code Online (Sandbox Code Playgroud)

这允许您调用存储过程但仍然返回域对象(或列表)而不需要.hbm.xml文件.

实际上有这篇文章


小智 5

在我的例子中,你应该有一个返回结果集的类,它是 GameActivity 类



    public class GameActivity
    {
            public virtual DateTime Date { get; set; }
            public virtual string GameRoundId { get; set; }
            public virtual int GameProvider { get; set; }
            public virtual string GameName { get; set; }
            public virtual decimal RealBet { get; set; }
            public virtual decimal RealWin { get; set; }
            public virtual decimal BonusBet { get; set; }
            public virtual decimal BonusWin { get; set; }
            public virtual decimal BonusContribution { get; set; }
            public virtual int IsRoundCompleted { get; set; }
            public virtual int IsRoundCancelled { get; set; }
    }

Run Code Online (Sandbox Code Playgroud)

调用存储过程“GetMemberGameActivity”获取列表



    var result = session.CreateSQLQuery("exec GetMemberGameActivity :mToken, :StartDate, :EndDate")
                        .SetResultTransformer(Transformers.AliasToBean())
                        .SetParameter("mToken", token)
                        .SetParameter("StartDate", startDate)
                        .SetParameter("EndDate", endDate)
                        .List().ToList();

Run Code Online (Sandbox Code Playgroud)