Mappare una proprietà da un campo da un'altra tabella in NHibernate
-
21-09-2019 - |
Domanda
prendere in considerazione la seguente classe:
class Order {
int OrderId {get; set;}
int CustomerId {get; set;}
string CustomerName {get; set;}
//other fields go here
}
che viene mappata tabella Ordini. E 'possibile mappare la CustomerName di proprietà alla tabella Clienti attraverso la relazione chiave esterna?
Soluzione
Sì, è possibile utilizzare il unirsi elemento mappatura per questo. Un'altra opzione è quella di mappare una vista invece di una tabella. Ma, se possibile, si dovrebbe prendere l'approccio orientato agli oggetti e mappare l'molti-a-molti tra Ordine e clienti.
Altri suggerimenti
Vi consiglio caldamente di non utilizzare <join/>
per questo. Anche se sarebbe compiere ciò che avete richiesto, crea altri problemi.
Al contrario, l'ordine deve avere un rapporto con il cliente. È quindi possibile proiettare il nome, se si desidera, anche se è più facile usare solo order.Customer.Name
.
Quindi, tutto si riduce a questo:
1) Aggiungere immobili Customer
al Order
public virtual Customer Customer { get; set; }
2) Mappa la proprietà (nell'esempio, CustomerId è il nome della colonna FK)
<many-to-one name="Customer" column="CustomerId"/>
3) Se si specificamente desidera avere una proprietà CustomerName
, progetto dal cliente:
public virtual string CustomerName { get { return Customer.Name; } }