2009-05-20 14 views
5

Mam następujące klasy:NHibernate formuła własność filtr

MyClass 
public virtual int Id { get; set; } 
public virtual int Code { get; set; } 
public virtual int Description { get; set; } 
public virtual int Name { get; set; } 

z poniższego mapowania:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="TestApplication" assembly="TestApplication"> 
    <class name="MyClass" table="MyTable"> 
    <id name="Id" column="id"> 
     <generator class="native"/> 
    </id> 

    <property name="Code" column="code"/> 
    <property name="Description" column="description"/> 
    <property name="Name" formula="(SELECT b.translation FROM translations b WHERE b.translation_id = translation_id AND b.language_id = :TranslationFilter.LanguageId)"/> 
    </class> 

    <filter-def name="TranslationFilter"> 
    <filter-param name="LanguageId" type="Int32"/> 
    </filter-def> 
</hibernate-mapping> 

Próbuję załadować podmiot przez wiosnę z:

Session.EnableFilter("TranslationFilter").SetParameter("LanguageId", 1); 
return Session.Get<MyClass>(1); 

ale dostanę wyjątek. Widzę (w profiler), że zmienna: TranslationFilter.LanguageId nie jest zastąpiony przez? a ta wartość parametru nie jest wysyłana do serwera?

Czy to możliwe (aby mieć filtry w formule) i jak?

Wielkie dzięki!

+0

To powinno być możliwe, Oren podaje przykład na swoim blogu: http: // ayende. com/Blog/archiwum/2006/12/26/LocalizingNHibernateContextualParameters.aspx –

+0

:) Przeczytałem ten wpis na blogu kilka razy (przed opublikowaniem tutaj), aby zobaczyć, gdzie się mylę, ale nie widziałem różnicy. Ale interesujące jest to, że ktoś na Nhforge powiedział, że parametry w formułach nie są obsługiwane ... – rrejc

Odpowiedz

1

Ta funkcja nie jest oficjalnie obsługiwana. W blogu oren o tej kombinacji 2 różnych funkcji (formuł i filtrów) powinno być zrobione z przymrużeniem oka ...