Mapeando uma propriedade para um campo de outra tabela em Nibernate
-
21-09-2019 - |
Pergunta
Considere a seguinte aula:
class Order {
int OrderId {get; set;}
int CustomerId {get; set;}
string CustomerName {get; set;}
//other fields go here
}
que é mapeado para a tabela de pedidos. É possível mapear o nome da propriedade para a tabela de clientes através da relação de chave estrangeira?
Solução
Sim, você pode usar o Junte elemento de mapeamento para isso. Outra opção é mapear uma visualização em vez de uma tabela. Mas, se possível, você deve adotar a abordagem orientada a objetos e mapear a relação muitos para muitos entre a ordem e o cliente.
Outras dicas
Eu sugiro fortemente que você não use <join/>
por esta. Embora isso realizasse o que você solicitou, cria outros problemas.
Em vez disso, o pedido deve ter um relacionamento com o cliente. Você pode projetar o nome, se quiser, embora seja mais fácil usar order.Customer.Name
.
Então, tudo se resume a isso:
1) Adicione Customer
propriedade para Order
public virtual Customer Customer { get; set; }
2) Mapeie a propriedade (no exemplo, o cliente é o nome da coluna FK)
<many-to-one name="Customer" column="CustomerId"/>
3) Se você deseja especificamente ter um CustomerName
Propriedade, projete -o do cliente:
public virtual string CustomerName { get { return Customer.Name; } }