Ich verwende NHibernate und eine gespeicherte Prozedur über eine benannte Abfrage Aufruf:Wie können C# -Nullwerte typisierte Werte für NHibernate namens IQuery-Parameter festgelegt werden?
<sql-query name="SearchStuff" read-only="true" cacheable="true">
<return class="ResultEntity" />
EXEC [SearchStuff] ?, ?, ? </sql-query>
Viele der Parameter für gespeicherte Prozeduren sind bewusst auf NULL festlegbaren - dies kann nicht geändert werden.
Die C#:
IQuery listQuery = this.Session.GetNamedQuery("SearchStuff");
listQuery.SetInt32(0, param1);
listQuery.SetDateTime(1, param2);
listQuery.SetString(2, param3);
IList<ResultEntity> results = listQuery.List<ResultEntity>();
Leider NHibernate bietet keine SetXyz() Methoden für Nullable-Wertetypen so habe ich versucht, einige Erweiterungsmethoden Zugabe zu kompensieren:
public static class QueryExtensions
{
public static void SetInt32(this IQuery query, int position, int? val)
{
if (val.HasValue)
{
query.SetInt32(position, val.Value);
}
else
{
query.SetParameter(position, null);
}
}
public static void SetInt32(this IQuery query, string name, int? val)
{
if (val.HasValue)
{
query.SetInt32(name, val.Value);
}
else
{
query.SetParameter(name, null);
}
}
public static void SetDateTime(this IQuery query, int position, DateTime? val)
{
if (val.HasValue)
{
query.SetDateTime(position, val.Value);
}
else
{
query.SetParameter(position, null);
}
}
public static void SetDateTime(this IQuery query, string name, DateTime? val)
{
if (val.HasValue)
{
query.SetDateTime(name, val.Value);
}
else
{
query.SetParameter(name, null);
}
}
}
Ich habe versucht, verschiedene Versionen von diesen, aber keine funktionieren. Der Code nicht oben mit dem Fehler:
System.ArgumentNullException : A type specific Set(position, val) should be called because the Type can not be guessed from a null value.
Ich versuchte auch nicht einfach die Parametereinstellung aber NHibernate erfordert jeden Parameter festgelegt werden. Ich habe versucht, beide positionelle und benannte Versionen mit den gleichen Ergebnissen zu verwenden.
Gibt es eine Möglichkeit NULL-Wert zu Wert typisierte Parameter in NHibernate benannten Abfragen zuweisen?
Vielen Dank für das, hilf mir :) – RhysC
Wenn Sie das Abfrageobjekt aus den Methoden geben Sie auch richtig, zum Beispiel erhalten die Verkettungs: public static IQuery SetDateTime (... ... retrun Abfrage; –
Feste Erweiterungen ! –