我通过调用UpdateBaseFiles成功获得Fluent NHibernate来更新我的数据库:
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方法。
答案 0 :(得分:11)
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是not working with SQLCE。
答案 1 :(得分:9)
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);
}