2015-11-02 4 views
1

Можно ли сопоставить необработанный sql-объект с NHibernate?Сопоставление собственного sql с Entity с NHibernate

Как следующее:

C# объекта:

public virtual IList<Result> MyResult { get; set; } 

hbm.xml:

<bag name="MyResult"> 
    <my-custom-sql type="Result"> 
     SELECT * FROM ResultTable where MyComplexCondition = true 
    </my-custom-sql> 
</bag> 

Результат имеет свой собственный hbm.xml. Можно ли сделать то, что я хочу достичь?

ответ

1

Существует функция, называемая <subselect>. Подробнее здесь

How to map an NHibernate entity to a query

Это может быть применен на <class>, а также на <bag>. Это может быть способ, как использовать его на сумке для MyEntity, который имеет коллекцию Languages  

<bag name="Languages" lazy="true" batch-size="25" 
    mutable="false" > 
    <subselect> 
    SELECT MyEntity_ID, Language_ID, IsNative FROM Languages 
    </subselect> 
    <key column="MyEntity_ID" /> 
    <composite-element class="Language"> 
    <parent name="MyEntity"/> 
    <many-to-one not-null="true" name="Language" class="Language" column="Language_ID" /> 
    <property not-null="true" name="IsNative" column="IsNative"/> 
    </composite-element> 
</bag> 

Это, конечно, должны быть использованы только для чтения (неизменных) решений

+0

Что такое родительский тег? –

+0

Просто необязательно .. просто способ, которым NHibernate мог предоставить ваши предметы коллекции * Ссылка BACK * на держатель коллекции/родитель. Холодная и сексуальная функция;) –

+0

Последний вопрос (очень сложно найти кого-то, кто понимает этот аспект NHibernate): Могу ли я сопоставить некоторую коллекцию внутри тега составного элемента? Например, сумка, имеющая ключ, указывающий на свойство Id составного элемента. –