NHibernate + MySql + DDD
No git acima você vai encontrar todo o código que está bem auto explicativo, mesmo assim, segue um passo a passo para quem for utilizar .Net + webAPI + NHibernate + DDD
Passo 1: Instalar o “mysql-installer-web-community-5.7.12.0”
*Aqui atente-se para instalar o provider para .NET e definir uma senha de root que será passada na string de conexão.
Passo 2: Uma vez instalado, abrir o projeto passado via github
https://github.com/fpnav/MinhaEmpresa.Agenda.git
Na pasta “MinhaEmpresa.Agenda/MinhaEmpresa.Agenda.Testes” encontre o arquivo nhibernate.cfg.xml e dentro dele você vai modificar a string de conexão, driver para o provider entre outros.
Trocar para isto:
<property name=”connection.driver_class”>NHibernate.Driver.MySqlDataDriver</property>
<property name=”connection.provider”>NHibernate.Connection.DriverConnectionProvider</property>
<property name=”dialect”>NHibernate.Dialect.MySQLDialect</property>
<property name=”connection.connection_string”>
server=localhost;user id=root;password=root;persistsecurityinfo=True;database=NHMysql1
</property>
* Desta forma estamos apontando para um Banco de Dados MySQL em LOCALHOST chamado NHMysql1
** Fazer uma análise do projeto como um todo, atentar-se para os Mapeamentos e para as Entidades no Domínio, neste reparar que temos Cliente como uma classe comum (sem relacionamentos) e temos também a Entidade User.cs e o Value Object Address.cs que possuem um relacionamento de 1 para Muitos (one to many).
Para estabelecer este relacionamento no NHibernate deveremos utilizar no mapeamento hbm.xml o atributo BAG ( a seguir os mapeamentos tanto para User quanto para Address).
<?xml version=”1.0″ encoding=”utf-8″ ?>
<hibernate-mapping xmlns=”urn:nhibernate-mapping-2.2″
namespace=”MinhaEmpresa.Agenda.Dominio.Entidades” assembly=”MinhaEmpresa.Agenda.Dominio”>
<!–Aqui no atributo table estava assim table=[usuarios] e funcionava bem no localDB–>
<!–Para o MySQL tive que retirar os colchetes para que funcionasse–>
<class name=”User” table=”Usuarios” mutable=”true”>
<id name=”Id”>
<generator class=”identity”/>
</id>
<property name=”UserName” />
<bag table=”EnderecoUsuario” name=”Address”>
<key column=”Id” not-null=”true”/>
<!–<list-index column=”Adress_Position”></list-index>–>
<composite-element class=”MinhaEmpresa.Agenda.Dominio.ValueObjects.Address”>
<property name=”Street1″/>
<property name=”Street2″/>
<property name=”City”/>
<property name=”Region”/>
<property name=”Country”/>
<property name=”PostalCode”/>
</composite-element>
</bag>
</class>
</hibernate-mapping>
* Repare que o mapeamento está relacionando Endereço como um BAG em relação à Usuário.
** No BD, será criada 1 tabela para Usuario e uma tabela para Endereco e nesta teremos um campo Id que será a chave estrangeira para Usuario.