使Fluent NHibernate输出架构更新到文件

时间:2010-03-20 14:41:05

标签: nhibernate fluent-nhibernate

我通过调用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方法。

2 个答案:

答案 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);
}