首页 文章

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

提问于
浏览
12

我通过调用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 回答

  • 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 .

  • 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);
    }
    

相关问题