Внедрить обновление схемы вывода Fluent NHibernate в файл
Я успешно получаю 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.
Ответы
Ответ 1
В SchemaUpdate есть перегрузка, которая принимает делегат Action<string>
, который вы можете предоставить для экспорта script. Вот пример в С#:
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.
Ответ 2
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);
}