通过代码进行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 3.2上找到了通过约定(代码)存储过程映射的解决方案
我必须通过代码混合使用hbm.xml和映射。查阅http://puredotnetcoder.blogspot.com/2011/07/mixed-mappings-with-hbm-and-mapping-by.html
现在我必须测试它
我很确定FluentHibernate不能做到这一点。只有当存储过程与CRUD操作直接关联时,才能在映射中使用存储过程。但是,可以使用FluentHibernate混合配置-Fluent Mappings和HBM文件。
在我的情况下,您应该有一个返回结果集的类,它是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();