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

时间:2012-01-09 10:13:14

标签: c# nhibernate stored-procedures fluent-nhibernate nhibernate-mapping

我使用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();
    }

有没有新的语法?或者应该使用旧式?

此致

3 个答案:

答案 0 :(得分:3)

我在NHibernate 3.2 Mapping by convention (code) stored procedure

上找到了解决方案

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

现在我必须测试它

答案 1 :(得分:2)

我很确定你不能用FluentNHibernate做到这一点。如果直接与CRUD操作关联,则只能在映射中使用sproc。但可以做的是使用混合FluentNHibernate配置 - Fluent Mappings HBM文件。

答案 2 :(得分:2)

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