目前有以下映射文件:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="NHibernateHelpers"
assembly="App_Code.NHibernateHelpers">
<class name="NHibernateHelpers.Fixture, App_Code" table="Fixture_Lists">
<id name="Id" column="UniqRefNo">
<generator class="guid" />
</id>
<property name="Date" column="FixDate"/>
<property name="HomeTeamId" column="HomeId"/>
<property name="HomeTeamName" column="Home_Team"/>
<property name="AwayTeamId" column="AwayId"/>
<property name="AwayTeamName" column="Away_Team"/>
<property name="Kickoff" column="Kickoff"/>
<bag name="Goals">
<key column="FixID" />
<one-to-many class="NHibernateHelpers.Goal, App_Code"/>
</bag>
<bag name="Bookings">
<key column="FixID" />
<one-to-many class="NHibernateHelpers.Booking, App_Code"/>
</bag>
<many-to-one name="HomeTeam" class="NHibernateHelpers.Team" column="HomeId" />
<many-to-one name="AwayTeam" class="NHibernateHelpers.Team" column="AwayId" />
<many-to-one name="Division" class="NHibernateHelpers.Division" column="Div_Comp" />
<property name="HomeFullTimeScoreCode" column="Home_FT_Score"/>
<property name="AwayFullTimeScoreCode" column="Away_FT_Score"/>
</class>
</hibernate-mapping>
它很好地映射到我继承的遗留数据库,但我想添加一个名为“MatchTime”的属性,其中包含存储过程的输出:
EXEC GetMatchTime @FixtureId = :Id
其中:Id是当前Fixture对象的Id。
这是否可以在映射文件中使用?
答案 0 :(得分:1)
小kludgy - 但是如何不将sp转换为函数,而是创建新函数并将它们用作现有sp的包装器?您可以将Id添加到函数中,并将其传递给存储过程,获取执行sp的结果,然后将其传回。
http://sqlblog.com/blogs/denis_gobo/archive/2008/05/08/6703.aspx
答案 1 :(得分:0)
您可能需要稍微调整一下这个参数,但它应该可以工作(Id与Fixture.Id的名称相匹配):
<property name='MatchTime' formula='(EXEC GetMatchTime Id)'/>
http://ayende.com/Blog/archive/2006/12/26/LocalizingNHibernateContextualParameters.aspx
答案 2 :(得分:0)
@Watson
公式的内容由NHibernate作为子查询添加,因此生成的SQL最终看起来像:
SELECT FieldA, FieldB, FieldC, ( EXEC GetMatchTime Id ) FROM Fixture_Lists
由于存储过程不允许作为子查询而遗憾地失败。
我可以将存储过程转换为函数,但是有很多函数,它可能会破坏遗留代码。