Wie wird NHibernate dazu gebracht, die Verwendung von nvarchar (4000) für die Eingabe von Parameterzeichenfolgen zu beenden?

8

Ich muss eine Abfrage optimieren, die von einem Speichervorgang (Abfrage einfügen) in einer Domänenentität erzeugt wird. Ich habe NHibernate mit Fluent NHibernate konfiguriert.

Hier ist die Abfrage, die von NHibernate beim Einfügen einer Benutzerantwort auf eine Umfrage generiert wurde:

%Vor%

Wenn man sich die Eingabeparameter für IpAddress und CountryCode ansieht, merkt man, dass NHibernate nvarchar(4000) verwendet . Das Problem ist, dass nvarchar(4000) ist viel größer als ich entweder für IpAddress oder CountryCode brauche und aufgrund der hohen Anforderungen an Datenverkehr und Hosting muss ich die Datenbank für die Speichernutzung optimieren.

Hier die Fluent NHibernate-Auto-Mapping-Überschreibungen für diese Spalten:

%Vor%

Dies ist nicht der einzige Ort, an dem ich unnötiges nvarchar (4000) sehe.

Wie kontrolliere ich NHibernate die Verwendung von nvarchar(4000) für die Darstellung von Strings?

Wie ändere ich diese insert -Anweisung, um die richtigen Eingabeparameter zu verwenden?

    
Mark Rogers 08.07.2011, 15:04
quelle

4 Antworten

6

Geben Sie Type als NHibernateUtil.AnsiString mit einem Length an, anstatt einen CustomSqlType zu verwenden.

    
Diego Mijelshon 08.07.2011, 15:33
quelle
3

Dieses Problem kann zu einem schwerwiegenden Leistungsproblem in Abfragen führen, wenn SQL Server gezwungen ist, eine Tabellensuche durchzuführen, anstatt einen Index zu verwenden. Wir verwenden varchar in unserer gesamten Datenbank, also habe ich eine Konvention erstellt, um den Typ global festzulegen:

%Vor%     
Jamie Ide 09.07.2011 15:25
quelle
2

Okay, das müssen wir tun, das SQLClientDriver ignoriert die length-Eigenschaft von SqlType . Also haben wir eine eigene Treiberklasse erstellt, die von SQLClientDriver erbt und die Methode GenerateCommand überschreibt ... So etwas wie folgt:

%Vor%     
Indu 11.04.2013 15:28
quelle
1

Hier ist eine Umgehung, wenn Sie alle nvarchar durch varchar

ersetzen möchten %Vor%

Schließen Sie es an Ihre Konfiguration an

%Vor%     
Bruce Martin 27.11.2017 20:01
quelle