Я видел различные посты в блоге, касающиеся SchemaUpdate
nHibernate и даже Ayende's
очень хорошего примера, и загружал примеры, но по какой-то причине я не могу заставить одну и ту же вещь работать на меня. Я отмечу, что я использую Fluent NHibernate
, но из того, что я могу сказать, это не должно иметь слишком большого значения.
Обновление
Я достиг точки, в которой запускается SchemaUpdate
, но это всего лишь создание полной схемы, а не «изменение». Другими словами, это так же, как если бы я только что построил базу данных свежо. Я публикую свой полный источник ниже.
Вот то, что я в основном пытаюсь ... Я думаю, что это, как правило, самоочевидно, но в основном я создаю объект Configuration
с использованием Fluent Configuration, а затем пытаюсь передать его. Юнит-тесты проходят, программы запускаются ... но на самом деле ничего не происходит. Я никогда не вижу никаких результатов, и я никогда не вижу обновленной схемы базы данных.
Создание базы данных (пропущенные столбцы и т. Д.)
База данных затем сопоставляется с новой схемой при следующем запуске.
База данных (обновление) должна обновлять схему в соответствии с методом обновления.
Но это не то, что на самом деле происходит.
Я также посмотрел другие посты по этому вопросу. Как здесь: http://morten.lyhr.dk/2008/03/nhibernates-schemaupdate-feature.html
Кроме того, я изменил свой код после того, как нашел следующее сообщение о переполнении стека
Обновление выходной схемы Fluent NHibernate в файл
И даже с примером кода не удалось сделать из головы или хвоста эту функцию.
Код
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();
}