/ / Dados do Fluent NHibernate removidos após a atualização do esquema - banco de dados, nhibernate, fluent-nhibernate, fluent

Dados fluentes do NHibernate removidos após a atualização do esquema - banco de dados, nhibernate, fluente-nhibernate, fluente

Estou usando o Fluent NHibernate para trabalhar com meu banco de dados.

Ao executar o código a seguir, algumas coisas funcionam. Uma função atualiza a estrutura das tabelas, o que também funciona, mas meus dados se foram.

ISessionFactory result = Fluently.Configure()
.Database(MySQLConfiguration.Standard.ConnectionString(connectionString))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Page>())
.ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true))
.BuildSessionFactory();

Alguém tem ideia de como resolver isso? As tabelas devem ser atualizadas, mas os dados não devem ser removidos.

No wiki do fluent NH, não consigo encontrar mais informações sobre ExposeConfiguration.

Respostas:

15 para resposta № 1

SchemaExport(cfg).Create(true, true)) é o que está fazendo. Não usei o Fluent, mas com base em um dos meus projetos que acabei de ver, acho que deveria ser algo como SchemaUpdate(cfg).Execute(true,true)

Edit: Uma vez que esta resposta ainda parece estar ajudando as pessoas, aqui está uma explicação mais longa.

A principal diferença aqui é o objeto que estamos criando. SchemaExport instância gera DDL para criar o banco de dados. O Create método gera o script e o segundo parâmetro informa se deve ou não executar esse script no banco de dados. Create chamadas Execute, passando parâmetros adicionais, incluindo um que diz "não simplesmente elimine a tabela, elimine-a e recrie-a" .Não há opção nesta classe para não eliminar as tabelas primeiro.

o SchemaUpdate exemplo é uma besta muito mais complicada(internamente), porque olha as tabelas existentes e gera um delta entre as tabelas atuais e aquelas especificadas na configuração (não consigo encontrar uma referência para isso, e não olhei o código, apenas sei trabalho). Em ambos os casos, porém, os parâmetros são basicamente os mesmos. O primeiro é "output ddl to console" e o segundo é "realmente execute a coisa no banco de dados".