Pergunta

Eu sou bastante novo para NHibernate e embora eu estou achando toneladas de informações sobre o mapeamento NHibernate na web, eu sou muito bobo para encontrar este pedaço de informação.

Assim, o problema é que eu tenho o seguinte modelo:

datamodel

é assim que eu gostaria que ele procure. Uma pessoa limpa, que tem duas propriedades endereço.

No banco de dados que eu gostaria de persistir isso em uma tabela. Assim, a linha Pessoa teria uma ShippingStreetname e uma coluna da rua, aquele mapeado para ShippingAddress.Streetname e outro para Address.StreetName

Eu encontrei um artigo sobre interfaces fluentes , mas ainda não descobriu como fazer isso através do XML de configuração.

Agradecemos antecipadamente!

Update: Eu encontrei a solução para este sozinho. Isto pode ser feito através do nó e trabalha bastante simples.

Para obter o mapeamento de endereço e ShippingAddress Eu apenas tive que adicionar o seguinte para o

<component name="Address" class="Address">
  <property name="Streetname"></property>
  <property name="Zip"></property>
  <property name="City"></property>
  <property name="Country"></property>
</component>

<component name="ShippingAddress" class="Address">
  <property name="Streetname" column="ShippingStreetname" />
  <property name="Zip" column="ShippingZip" />
  <property name="City" column="ShippingCity" />
  <property name="Country" column="ShippingCountry" />
</component>
Foi útil?

Solução

Ok. Eu encontrei a solução mim. A chave é a construção na configuração XML e funciona bastante bem.

Aqui está como isso é feito:

<component name="Address" class="Address">
  <property name="Streetname"></property>
  <property name="Zip"></property>
  <property name="City"></property>
  <property name="Country"></property>
</component>

<component name="ShippingAddress" class="Address">
  <property name="Streetname" column="ShippingStreetname" />
  <property name="Zip" column="ShippingZip" />
  <property name="City" column="ShippingCity" />
  <property name="Country" column="ShippingCountry" />
</component>

Outras dicas

Você pode configurar isso como duas relações. por exemplo.

<many-to-one name="ShippingAddress" class="Yournamespace.Address"/>
<many-to-one name="Address" class="Yournamespace.Address"/>

Você não precisa mesmo de um ID para um endereço. Basta pensar o quão caro é manter uma Id. Você tem problemas de concorrência, você precisa de singularidade, e assim por diante. Este é o objetivo dos ValueObjects (não se confunde com System.ValueObject ver definição DDD para ValueObject). Neste caso Address é um ValueObject para que ele não exigiu uma Id. E se você precisa de uma coleção de endereço você mapeá-lo como um "" ver http://www.nhforge.org/doc/nh/en/index.html#collections-ofvalues ??.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top