A tempos tenho tantado encontrar uma forma de utilizar o SQL Server Compact Edition Database, banco de dados disponibilizado de forma integrada ao VisualStudio 2008, juntamente com um framework de mapeamento ORM, como o ja comentado NHibernate. Até alguns dias atrás, sem nenhum sucesso, estive pesquisando as melhores formas de se utilizar o NHibernate e encontrei um framework chamado de ActiveRecord, que era muito falado nos sites relacionados ao NHibernate.
O ActiveRecord é um framework que utiliza o NHibernate e seu mapeamento. Ele gerencia grande parte desse processo e provê maneiras mais usuais de utilização do framework. Com ele é possível utilizar-se do mapeamento objeto-relacional sem se preocupar com as sessões do NHibernate, cada classe do modelo pode estender uma classe do ActiveRecord que possibilita uma interação mais fácil e dinâmica sobre o processo, como por exemplo, para salvar um objeto voce apenas chama o método objeto.save(), e muitas outras funcionalidade muito interessantes.
Se voce quer saber mais sobre o ActiveRecord pode acessar seu site e saber mais sobre o framework.
Voltando agora ao assunto, com a utilização do ActiveRecord, após várias tentativas de configuração, consegui criar uma aplicação que utiliza o banco de dados integrado do VisualStudio 2008 juntamente com o ActiveRecord, que por sua vez utiliza o NHibernate e faz toda a mágica de poder criar uma aplicação com um banco gerado em tempo de execução, sem que o programador tenha que se preocupar com a existência deste, com a criação de tabelas e tudo mais.
Quero então neste post mostrar como deve proceder a criação de uma aplicação que utilize o ActiveRecord juntamente com o banco integrado do VisualStudio 2008, volto a repetir o nome completo "VisualStudio 2008", pois não testei em outras versões. Assim iniciamos um novo projeto, aqui estou criando um Windows Forms, mas pode ser outro tipo de projeto:
Agora você vai precisar importar para o projeto as bibliotecas do ActiveRecord e do NHibernate, se você ainda não as possui pode baixar aqui. Dentro do pacote baixado voce vai encontrar várias Dll's, voce deve importar para o seu projeto cinco delas, a Castle.ActiveRecord.dll, log4net.dll, Nhibernate.dll, Iesi.Collections.dll e a Nhibernate.ByteCode.Castle.dll, estas são as dll's necessárias para o funcionamento básico do ActiveRecord.
Também deve ser importada a biblioteca para o funcionamento do SQL Server Compact Edition, ela se encontra dentro das Dll's do framework .NET 3.5, que é instalado juntamente com o VisualStudio 2008. Adicione então ao projeto a biblioteca System.Data.SqlServerCe.dll.
Agora seu projeto ja possui todas as bibliotecas necessárias para o funcionamento da aplicação. Temos somente que alterar a configuração para a Dll System.Data.SqlServerCe.dll, clicando sobrepode-se visualizar suas propriedades, então a propriedade "Copy Local" deve ser alterada para "True", para que quando a aplicação for compilada a Dll seja copiada para a pasta /bin/released. Isso deve ser feito pelo fato de ser esta a Dll que fornece a comunicação com o banco.
Agora deve-se criar a configuração de conexão do ActiveRecord com o banco, para isso adicionamos ao projeto um arquivo xml, que eu vou chamar de configuracao.xml, é ele que irá configurar o ActiveRecord. Este é o código de configuração que o arquivo deve conter:
Olhando o código pode-se ver onde está sendo configurado qual é o banco que será utilizado, neste caso "Data Source=teste.sdf", ou seja, o nome do banco é "teste.sdf", este não precisa ser criado no projeto pois será gerado automaticamente pelo último procedimento mostrado neste post, apenas é importante que ele seja criado com este mesmo nome.
Agora basta criarmos a classe que queremos mapear, neste exemplo, apenas como ilustração eu criei a classe Pessoa, que estende a classe ActiveRecordBase, para que seja possível o acesso aos métodos do ActiveRecord diretamente do objeto criado. Então temos a seguinte classe:
Pode-se perceber o uso dos chamados "Annotations" do ActiveRecord, que são utilizados para configurar o mapeamento da classe dentro do próprio código-fonte. Você pode aprender mais sobre isso lendo a documentação do ActiveRecord, disponibilizada em seu site.
Finalmente, agora basta criarmos a inicialização do ActiveRecord, que deve ser a primeira coisa a ser chamada no início da execução da aplicação. Eu utilizo o seguinte código, que verifica a existência do banco e se por acaso ele não existir este será criado, e inicializa as configurações do ActiveRecord. Para ser chamado antes que a aplicação inicie sua execução eu o coloquei dentro o método Load do Form.
Pronto! Nossa aplicação está pronta. Se você for até o local do projeto, dentro da pasta /bin/debug/ , você pode visualizar o banco criado. Com a ajuda do SQL Server Management Studio pode-se visualizar as tabelas criadas e o conteúdo de cada uma delas.
Agora podemos criar aplicações sem se preocupar com o banco que estaremos utilizando na maquina que irá executar a aplicação, basta apenas ter instalado o framework .NET 3.5 que a aplicação funcionará perfeitamete.
ps: Não é recomendado utilizar este banco quando um número muito grande de registros (mais que 100.000 por tabela) for previsto, para isso deve-se utilizar os bancos convencionais, eu indico o SQL Server 2008.Até o próximo Post.