Lutando para compreender o esquema do nHibernate, mesmo com posts do blog
Vi várias postagens de blog relacionadas ao @ nHibernate'SchemaUpdate
, e até mesmoAyende's
muito bom exemplo, e baixei as amostras, mas por algum motivo não consigo fazer o mesmo para mim. Vou notar que estou usandoFluent NHibernate
, mas pelo que sei, isso não deve fazer muita diferenç
Cheguei ao ponto em que oSchemaUpdate
é executado, mas é apenas uma criação de esquema completa, sem 'alteração'. Em outras palavras, é o mesmo que se eu tivesse acabado de construir o banco de dados. Estou postando minha fonte completa abaixo.
Aqui está o que estou basicamente tentando ... Eu acho que geralmente é óbvio, mas basicamente estou criando umConfiguration
objeto usando a Configuração fluente e depois tentando passar. Os testes de unidade são aprovados, os programas são executados ... mas nada realmente acontece. Nunca consigo ver nenhum resultado nem o esquema do banco de dados atualizado.
banco de dados é criado (colunas ausentes etc
banco de dados é mapeado com o novo esquema na próxima execuçã
Database (Update) deve atualizar o esquema pelo método Updat
Mas não é isso que está realmente acontecend
Eu também olhei para outras postagens sobre o assunto. Como aqui :http: //morten.lyhr.dk/2008/03/nhibernates-schemaupdate-feature.htm
Adicionalmente, alterei meu código depois de encontrar a seguinte postagem do Stack OverflowFaça atualização do esquema de saída do Fluent NHibernate para o arquivo
E mesmo com o código de amostra não foi possível fazer cara ou coroa com esse recurs
Códig private static void UpdateSchema(NHibernate.Cfg.Configuration Config) {
System.Action<string> updateExport = x => {
using (var file = new System.IO.FileStream(@"C:\Users\User\Documents\Visual Studio 2010\Mappings\update.sql", System.IO.FileMode.Append, System.IO.FileAccess.Write))
using (var sw = new System.IO.StreamWriter(file)) {
sw.Write(x);
sw.Close();
}
};
NHibernate.Tool.hbm2ddl.SchemaUpdate SchemaUpdater = new NHibernate.Tool.hbm2ddl.SchemaUpdate(Config);
SchemaUpdater.Execute(updateExport, false);
}
public static ISessionFactory Map(string connectionString) {
// fluently configure an ms-sql 2008 database
return FluentNHibernate.Cfg.Fluently.Configure()
.Database(FluentNHibernate.Cfg.Db.MsSqlConfiguration.MsSql2008
.ConnectionString(c => c.Is(connectionString))
.AdoNetBatchSize(50)
.FormatSql()
.UseReflectionOptimizer())
.Cache(c => c
.ProviderClass<NHibernate.Caches.SysCache2.SysCacheProvider>()
.UseQueryCache()
.UseSecondLevelCache()
.UseMinimalPuts())
.Mappings(m => {
m.FluentMappings.Conventions.Setup(x => {
x.AddFromAssemblyOf<Mappings.AspectMap>();
x.Add<EnumConvention>();
x.Add(FluentNHibernate.Conventions.Helpers.AutoImport.Never());
});
m.FluentMappings.AddFromAssembly(System.Reflection.Assembly.GetExecutingAssembly());
})
.ExposeConfiguration(UpdateSchema)
.BuildSessionFactory();
}