FluentNhibernate 不支持存储过程

本文介绍在不支持存储过程的情况下,如何通过混合映射方式实现存储过程的调用。具体介绍了使用FluentConfiguration和HBMConfiguration进行映射的方法,并提供了一个具体的例子。

 一直以为没有使用FN进行存储过程的操作,这次因为后台首页想统计下数据,就利用了存储过程,但在使用中却发现FN目前还不支持存储过程(点击查看官方),没有办法,只能利用Fluent Configuration和HBM Configuration混合的映射方式。

这里要注意的是:

a)存储过程返回的数据,最好重新定义一个class,并且进行映射(可以使用FN或者HDM方式)

b)把新定义的class和映射的hbm文件,放到你的Model层,这是为了方便以后的管理。

c)映射存储过程的hdm文件名,以返回类型的名称命名。(如果返回的class命名为:DataResult,hbm的文件名为:DataResult.hbm.xml)

class:

 public class TravelDefaultData
    {
        public virtual int UserCount { get; set; } public virtual int OrderCount { get; set; } public virtual int LineCount { get; set; } public virtual int CrusiseCount { get; set; } }

hbm:

<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Travel.Domain" namespace="Bus.Travel"> <sql-query name="GetTravelData"> <return class="TravelDefaultData"> <return-property column="usercount" name="UserCount" /> <return-property column="ordercount" name="OrderCount" /> <return-property column="linecount" name="LinCrusiseCount" /> </return> EXEC [GetTravelData] :userStartDate, :orderStartDate, :lineStartDate, :crusiesStartDate </sql-query> </hibernate-mapping>

TravelDefaultData的映射,可以参考这里

最后记得配置下混合映射:

var db = Fluently.Configure()
                .Database(GetSqlConfig())
                .Mappings(a =>
                {
                    a.FluentMappings.AddFromAssemblyOf<AreaMap>(); a.HbmMappings.AddClasses(typeof(TravelDefaultData)); }); return db.BuildSessionFactory();

配置以后就能按照NHibernate的方式进行使用了。

转载于:https://www.cnblogs.com/aaa6818162/p/4146994.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值