Ich bin neu in NHibernate und ich versuche zu lernen, meine Daten abzufragen.Abfrage mit NHibernate
Unten ist die Konfiguration XML. Nur das Rezept wird angezeigt.
Ich möchte in der Lage sein, Rezepte nach Rezepttiteln aus eingegebenen Stichwörtern und auch Zutaten aus Zutatenname abzufragen.
So könnten Sie zum Beispiel "Pasta Wein" eingeben.
Dies ist, was ich versucht habe, aber gibt mir einen Fehler.
hql = "from Recipe r " +
"left join r.Images " +
"inner join r.User " +
"inner join r.Ingredients i " +
"where i.IngredientName Like '%pasta%' OR i.IngredientName Like '%wine%' OR r.RecipeTitle Like '%pasta' OR r.RecipeTitle Like '%wine%'";
Ich möchte die Sammlungen auch eifrig laden.
Werde ich nach rechts fragen ?? Ich muss in der Lage sein, die Abfragezeichenfolge aus meinen Suchkriterien zu erstellen. Das wäre in SQL einfach von mir.
Malcolm
<class name="Recipe" table="Recipes" xmlns="urn:nhibernate-mapping-2.2">
<id name="RecipeID" type="Int32" column="RecipeID">
<generator class="identity" />
</id>
<property name="RecipeTitle" type="String">
<column name="RecipeTitle" />
</property>
<property name="Completed" type="Boolean">
<column name="Completed" />
</property>
<property name="ModifiedOn" type="DateTime">
<column name="ModifiedOn" />
</property>
<property name="Rating" type="Double">
<column name="Rating" />
</property>
<property name="PrepTime" type="Int32">
<column name="PrepTime" />
</property>
<property name="CookTime" type="Int32">
<column name="CookTime" />
</property>
<property name="Method" type="String">
<column name="Method" />
</property>
<bag name="Images" inverse="true" cascade="all">
<key column="RecipeID" />
<one-to-many class="OurRecipes.Domain.RecipeImage, OurRecipes.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
<many-to-one name="Category" column="CategoryID" />
<bag name="Comments" inverse="true" cascade="all">
<key column="RecipeID" />
<one-to-many class="OurRecipes.Domain.Comment, OurRecipes.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
<many-to-one name="User" column="EnteredByID" />
<bag name="Ingredients" inverse="true" cascade="all">
<key column="RecipeID" />
<one-to-many class="OurRecipes.Domain.Ingredient, OurRecipes.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
</class>
Um dieses Problem zu lösen, können Sie den DistinctRootEntityResultTransformer erhalten –
Warum würden Sie FetchMode.Join statt FetchMode.Eager für diese Lasten verwenden, wenn Sie wirklich beabsichtigten, die untergeordneten Objekte zu verwenden? –
Ich sehe nicht, wie das dynamisch ist, wenn Sie die Schlüsselwörter fest codieren.Wie würdest du abfragen, wenn ich dir eine Reihe von Wörtern geben würde, die durch Leerzeichen getrennt sind ??? – Malcolm