2012-10-29 13 views
6

Sto tentando di associare una proprietà a una colonna arbitraria di un'altra tabella. I documenti dicono che la formula può essere SQL arbitrario e gli esempi che vedo sono simili.Utilizzo di una mappatura di proprietà con una formula in NHIbernate

Tuttavia, lo stato di SQL NHibernate non è nemmeno valido. L'intera istruzione SQL dalla formula viene iniettata nel mezzo dell'istruzione SELECT.

 Property(x => x.Content, map => 
      { 
       map.Column("Content"); 
       map.Formula("select 'simple stuff' as 'Content'"); 
      }); 
+0

E l'SQL generato è ...? – hazzik

risposta

9

questo è il modo Formula è stato progettato, si suppone di lavorare in questo modo. È necessario avvolgere l'istruzione SQL in paren in modo da generare un codice SQL valido.

Inoltre, non è possibile specificare colonna e formula insieme. È necessario fornire l'intera istruzione SQL. Qualsiasi colonna non prefissata/con escape ('id' nell'esempio seguente) sarà trattata come colonne della tabella dell'entità proprietaria.

Property(x => x.Content, map => 
{ 
    map.Formula("(select 'simple stuff' as 'Content')"); 
}); 

// or what you probably want 

Property(x => x.Content, map => 
{ 
    map.Formula("(select t.Content FROM AnotherTable t WHERE t.Some_id = id)"); 
}); 
+0

Quindi sembra che mi manchi il parus sinistro e destro per uno. Id rappresenta la mappatura Id nella tabella o è il nome della colonna? Nome colonna – Brian

+0

poiché è "sql arbitrario" – Firo

+0

ok. Quindi, come potrei fare qualcosa di simile a SELECT Field FROM MyTable WHERE MyTable.MyFK = {TheFKValue} AND MyTable.Type = {TheType}? Le cose nelle parentesi graffe sono valori che dovrebbero essere sostituiti con i valori forniti dall'entità. C'è anche un modo? – Brian

Problemi correlati