6

Czy są jakieś dobre przykłady użycia tego (NHibernate.Criterion.IdentifierEqExpression) online? Nie mogłem znaleźć żadnego. Jestem trochę zdezorientowany tym, co powinieneś przekazać konstruktorowi.NHibernate - wymuszanie ucieczki w tabelach

Przechodzę w int32 z 1 i myślę, że mój test powinien w zasadzie wykonać zapytanie typu "where id = 1", a zamiast tego wyświetla się "where id =?" i coś o parametrach pozycyjnych. Jeśli to nie jest to, co powinno zostać przekazane konstruktorowi ... co to jest?

prawdziwy problem
Kiedy patrzę na wyjściu SQL wydaje się, że działa poprawnie z wyjątkiem faktu, mój stół nazwie użytkownika i NHibernate nie jest otaczający go jak [użytkownik]. Jakikolwiek sposób tego wymusić?

+0

Czy możesz podać przykład twojego kryterium wyrażenia? –

+0

Nie widzę związku między IdentifierEqExpression a nazwą tabeli. Prosze wyjaśnić nieco więcej. –

Odpowiedz

15

Podaj nazwę tabeli jako ` User `. Na przykład:

(HBM) 
<class name="User" table="`User`"> 

(Fluent) 
public UserMap() 
{ 
    WithTable("`User`"); 
    ... 

(Mapping By Code) 
public UserMap() 
{ 
    Table("`User`"); 
    ... 

Podobnie, z kolumnami musisz zrobić coś takiego:

Map(x => x.IsCurrent, "`Current`"); 

oh radościach pracy ze starszymi DB.

+2

Możesz użyć funkcji backtick (') do unikania nazw w sposób niezależny od bazy danych ([] są specyficzne dla SQL Server). –

+1

Dobrze, widziałem, że używał [] i nawet o tym nie myślał. Zaktualizuję mój post w interesie najlepszych praktyk. –

+0

Cool. Nie miałem pojęcia, że ​​tył zwrotny jest standardem. Czy to jest coś, co Hibernate pożyczył właśnie od MySQL, a następnie parsuje, aby uniezależnić bazę danych? Szkoda, że ​​ustawienia dialektu nie troszczą się o to. – BuddyJoe