首页 > 代码库 > FluentNhibernate 不支持存储过程
FluentNhibernate 不支持存储过程
一直以为没有使用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的方式进行使用了。
FluentNhibernate 不支持存储过程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。