Проблемы с пониманием nHibernate SchemaUpdate, даже с сообщениями в блогах

Я видел различные сообщения в блогах, касающиеся nHibernate SchemaUpdate , и даже очень хороший пример Айенде и загрузил образцы, но по какой-то причине я не могу заставить то же самое работать для меня. Замечу, что я использую 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 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()
                   .UseQueryCache()
                   .UseSecondLevelCache()
                   .UseMinimalPuts())
            .Mappings(m => {
                m.FluentMappings.Conventions.Setup(x => {
                        x.AddFromAssemblyOf();
                        x.Add();
                        x.Add(FluentNHibernate.Conventions.Helpers.AutoImport.Never());
                    });
                m.FluentMappings.AddFromAssembly(System.Reflection.Assembly.GetExecutingAssembly());
            })
            .ExposeConfiguration(UpdateSchema)
            .BuildSessionFactory();
    }

6
задан Community 23 May 2017 в 12:25
поделиться