Обновление выходной схемы Fluent NHibernate в файл - PullRequest
12 голосов
/ 20 марта 2010

Я успешно получаю Fluent NHibernate для обновления базы данных, вызывая UpdateBaseFiles:

Public Sub UpdateBaseFiles()
    Dim db As SQLiteConfiguration
    db = SQLiteConfiguration.Standard.UsingFile(BASE_DBNAME)
    Fluently.Configure() _
            .Database(db) _
            .Mappings(Function(m) m.FluentMappings.AddFromAssemblyOf(Of FluentMap)()) _
            .ExposeConfiguration(AddressOf UpdateSchema) _
            .BuildConfiguration()
End Sub
Private Sub UpdateSchema(ByVal Config As Configuration)
    Dim SchemaUpdater As New SchemaUpdate(Config)
    SchemaUpdater.Execute(True, True)
End Sub

Как вывести DDL в файл, я делаю это при первоначальном создании схемы с помощью:

Private Sub BuildSchema(ByVal Config As Configuration)
    Dim SchemaExporter As New SchemaExport(Config)
    SchemaExporter.SetOutputFile("schema.sql")
    SchemaExporter.Create(False, True)
End Sub

но SchemaUpdate не имеет метода SetOutputFile.

Ответы [ 2 ]

11 голосов
/ 20 марта 2010

SchemaUpdate имеет перегрузку, которая принимает делегат Action<string>, который вы можете предоставить для экспорта сценария. Вот пример в C #:

Action<string> updateExport = x =>
    {
        using (var file = new FileStream(path, FileMode.Create, FileAccess.Append))
        using (var sw = new StreamWriter(file))
        {
            sw.Write(x);
        }
    };
new SchemaUpdate(config).Execute(updateExport, false);

Я думаю, что это сработает. Я не смог протестировать его, потому что SchemaUpdate не работает с SQLCE .

9 голосов
/ 16 февраля 2013

SchemaUpdate вызывает действие для каждого выполняемого обновления, поэтому вы не хотите создавать заново (и, следовательно, перезаписывать) один и тот же файл для каждой команды, как указано выше, это то, что требуется:

using (var file = new FileStream(@"..\..\..\schema-update.sql",
       FileMode.Create,
       FileAccess.ReadWrite))
using (var sw = new StreamWriter(file))
{
   new SchemaUpdate(config)
       .Execute(sw.Write, false);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...