NHibernate Jak zapytać o właściwość IList <string>?

Usiłuję odpytać o właściwość IList <string> na jednej z moich klas domen przy użyciu NHibernate. Oto prosty przykład pokazujący:

public class Demo
{
    public Demo()
    {
        this.Tags = new List<string>();
    }
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<string> Tags { get; set; }
}

Mapowane w ten sposób:

<class name="Demo">
<id name="Id" />
<property name="Name" />
<bag name="Tags">
  <key column="DemoId"/>
  <element column="Tag" type="String" />
</bag>

I jestem w stanie zapisać i odzyskać w porządku. Teraz wyszukuj instancje mojej klasy domeny, w których właściwość Tags zawiera określoną wartość:

var demos = this.session.CreateCriteria<Demo>()
            .CreateAlias("Tags", "t")
            .Add(Restrictions.Eq("t", "a"))
            .List<Demo>();

Wyniki w błędzie: kolekcja nie była powiązaniem: Demo.Tags

var demos = (from d in this.session.Linq<Demo>()
                     where d.Tags.Contains("a")
                     select d).ToList();

Powoduje błąd: Odniesienie Objct nie jest ustawione na wystąpienie obiektu.

var demos = this.session.CreateQuery("from Demo d where :t in elements(d.Tags)")
            .SetParameter("t", "a")
            .List<Demo>();

Działa dobrze, ale ponieważ moja rzeczywista klasa domen ma wiele właściwości i buduję skomplikowane zapytanie dynamiczne, robienie brzydkich manipulacji ciągami nie jest moim pierwszym wyborem. Wolałbym raczej używać ICriteria lub Linq. Mam interfejs użytkownika, w którym można wprowadzić wiele różnych możliwych kryteriów wyszukiwania. Kod, który teraz buduje ICriteria, to dziesiątki linii. Naprawdę nie chciałbym zamieniać tego w manipulację ciągami HQL.

questionAnswers(6)

yourAnswerToTheQuestion