[C#] Hibernate escapet zijn fields niet?

Pagina: 1
Acties:

  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Ik ben wat dingetjes aan het uitproberen met NHibernate. Ik gebruik hiervoor C# 2.0 en SQL Server 2005. Ik heb een klasse FiscalYear die onder andere een property End heeft. Het probleem is dat deze niet geëscaped wordt in de queries die NHibernate uitvoert, waardoor ik steeds een NHibernate.ADOException krijg met als InnerException een SqlClient.SqlException met als Message: "Incorrect syntax near the keyword 'End'."

Ik stel mijn dialect in in mijn App.config als volgt:
XML:
1
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/>


Volgens de documentatie moet de dialect de fields escapen:
You may force NHibernate to quote an identifier in the generated SQL by enclosing the table or column name in backticks in the mapping document. NHibernate will use the correct quotation style for the SQL Dialect (usually double quotes, but brackets for SQL Server and backticks for MySQL).
De query die NHibernate uitvoert is:
code:
1
2
3
4
5
6
7
8
NHibernate: SELECT dossier0_.UserId as UserId1_, dossier0_.Name as Name1_, 
dossier0_.DateEnded as DateEnded1_, dossier0_.DateCreated as DateCrea7_1_, 
dossier0_.DefaultFiscalYearStart as DefaultF6_1_, fiscalyear1_.UserId as 
UserId0_, fiscalyear1_.DossierId as DossierId0_, fiscalyear1_.Start as Start0_, 
fiscalyear1_.[b]End[/b] as End0_ FROM Dossiers dossier0_ left outer join 
Dossiers fiscalyear1_ on dossier0_.UserId=fiscalyear1_.UserId 
WHERE dossier0_.UserId=@p0
@p0 = '1'


De oplossing om de brackets hard in de mapping file te zetten vind ik geen mooie oplossing, ik zou graag hebben dat de dialect doet wat het hoort te doen. Iemand enig idee wat de oorzaak en eventueel de oplossing van dit probleem is?

[ Voor 6% gewijzigd door dingstje op 05-09-2006 23:02 ]

If you can't beat them, try harder


  • whoami
  • Registratie: December 2000
  • Laatst online: 20:35
Ik ben ook op dit probleem gebotst dit weekend.

Echter, je moet wel goed de documentatie lezen:

You may force NHibernate to quote an identifier by enclosing the table or column name with backticks in the mapping document
Je moet dus in je mapping document backticks gaan toevoegen voor dat veld. (Zelf had ik het gedaan mbhv block-haken, maar dit zou dus moeten werken).

code:
1
<property name="End" column="`End`"/>

of
code:
1
<property name="End" column="[End]"/>


Hmm, ok, niet volledig gelezen....
Nee, ik denk niet dat je het kan bekomen door het specifieren v/h dialect. Heb ook even gezocht toen, maar niets gevonden.
Echter, het dialect dat je specifieert zorgt er wel voor dat de backticks vervangen worden naar het correcte escape character.
(Hmm, toch volledig gelezen, maar je laatste stukje stond er nog niet in toen ik dit al typte)

[ Voor 27% gewijzigd door whoami op 05-09-2006 23:12 ]

https://fgheysels.github.io/