2012-10-29 12 views
6

Próbuję odwzorować właściwość na dowolną kolumnę innej tabeli. Dokumenty mówią, że formuła może być dowolnym SQL i przykłady, które widzę, są podobne.Korzystanie z mapowania właściwości za pomocą wzoru w NHIbernate

Jednak wygenerowany NHibernate SQL nie jest nawet poprawny. Cała instrukcja SQL z formuły jest wprowadzana w środku instrukcji SELECT.

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

A wygenerowany kod SQL to ...? – hazzik

Odpowiedz

9

ten sposób Formula został zaprojektowany, to ma działać w ten sposób. Musisz zawrzeć instrukcję SQL w parens, aby można było wygenerować poprawny SQL.

Ponadto nie można jednocześnie określić kolumny i formuły. Musisz podać całą instrukcję SQL. Wszelkie kolumny nieprefiksowane/unikane ("id" w poniższym przykładzie) będą traktowane jako kolumny tabeli jednostki będącej właścicielem.

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

Wygląda na to, że brakuje mi lewej i prawej pareny na jedną. Czy identyfikator reprezentuje mapowanie identyfikatora w tabeli lub czy jest to nazwa kolumny? – Brian

+0

nazwa kolumny, ponieważ jest "arbitralne sql" – Firo

+0

ok. Więc jak mam zrobić coś takiego, jak to pole SELECT z MyTable WHERE MyTable.MyFK = {TheFKValue} AND MyTable.Type = {TheType}? Rzeczy w nawiasach klamrowych są wartościami, które należy zastąpić wartościami podanymi z jednostki. Czy istnieje nawet sposób? – Brian

Powiązane problemy