通过代码进行Nhibernate映射,如何使用存储过程

本文关键字:何使用 存储过程 映射 Nhibernate 代码 | 更新日期: 2023-09-27 18:19:51

我通过代码使用了nhibernate 3.2新的特征映射(它工作得很好)。

例如:

[Serializable]
public class Profil
{
    public virtual int Id
    {
        get;
        set;
    }
    public virtual string Nom
    {
        get;
        set;
    }
}
public class ProfilMap : ClassMapping<Profil>
{
    public ProfilMap()
    {
        Id<int>(x => x.Id, map =>
        {
            map.Generator(NHibernate.Mapping.ByCode.Generators.Identity);
        });
        Property<string>(x => x.Nom);
    }
}

我现在想使用存储过程。对于旧版本的nhibernate,我使用类似的hbm.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <sql-query name="FillNouveautes">
    exec FillNouveautes :Idclient
  </sql-query>
</hibernate-mapping>

我是这样用的:

    public void FillNouveautes(ISession session, int idClient)
    {
        var query = session.GetNamedQuery("FillNouveautes");
        query.SetInt32("Idclient", idClient);
        query.ExecuteUpdate();
    }

有新的语法吗?还是应该使用旧的风格?

问候

通过代码进行Nhibernate映射,如何使用存储过程

我在NHibernate 3.2上找到了通过约定(代码)存储过程映射的解决方案

我必须通过代码混合使用hbm.xml和映射。查阅http://puredotnetcoder.blogspot.com/2011/07/mixed-mappings-with-hbm-and-mapping-by.html

现在我必须测试它

我很确定FluentHibernate不能做到这一点。只有当存储过程与CRUD操作直接关联时,才能在映射中使用存储过程。但是,可以使用FluentHibernate混合配置-Fluent MappingsHBM文件。

在我的情况下,您应该有一个返回结果集的类,它是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; }
    }

调用存储过程"GetMemberGameActivity"以获取列表


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