2008-11-10 58 views
3

目前有以下映射文件:NHibernate的 - 从存储过程填充一个属性

<?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> 

这很好地映射到我继承了传统数据库,但我想添加一个名为“匹配时间”属性包含存储过程的输出:

EXEC GetMatchTime @FixtureId = :Id 

其中:Id是当前Fixture对象的Id。

这是可能的映射文件?

+0

有趣的问题。 NHibernate是为这样的情况构建的,所以我怀疑这应该被支持。 – yfeldblum 2008-11-10 18:39:24

回答

0

@Watson

的公式的内容被NHibernate添加为一个子查询,所以得到的SQL最终看起来像这样:

SELECT FieldA, FieldB, FieldC, (EXEC GetMatchTime Id) FROM Fixture_Lists 

由于存储过程不允许作为子查询而不幸失败。

我可以将存储过程转换为函数,但其​​中有很多,它可能会破坏遗留代码。

相关问题