Anterior Próximo

Criando a base de dados a partir do mapeamento com Nhibernate Schema Export publicado em 05/05/2010

É comum vermos desenvolvedores gerando automaticamente as classes e mapeamentos do Nhibernate a partir de uma base de dados existente, mas poucas vezes vemos o processo inverso.

Caso você seja um adepto do DDD, deve saber que apesar de comum e funcional, não é saudável construir as classes da aplicação baseadas apenas na base de dados. Não é saudável, pois deste modo acabamos caindo em um cenário onde toda tabela vira uma classe deixando de aplicar muitos conceitos de Orientação a Objetos como, por exemplo, a Herança.

O ídeal é pensar apenas no domínio da aplicação na hora de modelar e criar as classes.

Com as classes criadas e os mapeamentos definidos, podemos gerar a base de dados a partir disso com o SchemaExport.

A Classe SchemaExport está contida na Dll do Nhibernate dentro do Namespace NHibernate.Tool.hbm2ddl e sua utilização é extremamente simples.

// cria uma nova cfg do nhibernate
var cfg = new Configuration();
cfg.Configure();
            
// Executando o schema export
var schemaExport  = new SchemaExport(cfg);
schemaExport.Execute(true, true, false);

Como um exemplo vale mais do que mil palavras, aqui você pode baixar o projeto onde modelei as classes e implementei o SchemaExport do Nhibernate para gerar a base de dados.


Tags:

retweet

BBCode permitido - [code], [pre], [b], [i], [u], [del], [url], [left], [right], [center]

  • 5/7/2010 16:02 - Anderson Wernek

    Fala Diogo. Gostei da sua disponibilidade em contribuir para o conhecimento de todos.

    Mas gostaria de saber de você, como seria a configuração do banco SQL Server? Sabe, como fica na hora de criar a base. No caso seria no xml...

    Abraços e suscesso!

  • 5/7/2010 16:09 - Diogo Menezes

    Anderson, obrigado.

    Sua dúvida é referente a configuração do NH para SqlServer ?

    Se for:


    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MsSql2000Dialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">Server=localhost;Database=base;User ID=usuario;Password=senha;</property>
    <property name="connection.isolation">ReadCommitted</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
    <mapping assembly="NomeDoAssembly"/>
    </session-factory>
    </hibernate-configuration>

  • 12/2/2011 16:55 - Thiago Araujo

    Diogo, estou com um problema...

    Utilizando o seu projeto, adicionei uma nova entidade chamada Endereco, fiz no mesmo namespace e criei o hbm.xml da entidade. O problema é que na hora de gerar o script esta nossa entidade nao é gerada... na var var cfg somente indentifica como entidade mapeada Pessoa e Telefone... Tenho que fazer alguma configuração para ela reconhecer minha nova entidade?

  • 4/4/2011 9:05 - Thiago

    Bom dia! muito bom seu post,mas so fiquei com uma duvida, na hora que vc usa o schemaExport.Execute(true, true, false);

    o que ele passa com esses parametros ? e ha alguma maneira dele gerar um script em txt ?


Ir direto para o topo