我使用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();
}
有没有新的语法?或者应该使用旧式?
此致
答案 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();