FluentNHibernate数据库部署

时间:2012-08-02 10:19:43

标签: c# fluent-nhibernate database-migration

我正在考虑使用FluentNHibernate作为我的ORM,但我想知道如何最好地编写数据库部署部分。我之前有使用Entity Framework和代码进行首次迁移的经验,但我对FluentNHibernate很好奇所以我正在玩游戏。我看过FunnelWeb Blog但是我还没有时间来真正掌握他们是如何做到的,所以我在项目的一个非常具体的部分得到了一些帮助,我希望有人可以总结一下。

我的Visual Studio解决方案在以下程序集中分开(我将考虑使用类似Autofac的IoC,但稍后会出现):

Solution
    Domain Assembly
        DatabaseDeployment Namespace
        Model Namespace
    Web UI

所以,在我的域程序集中,我想要一个DBMigrator类,它的合同看起来像这样:

public interface IDBMigrator
{
    bool NeedsUpdating();
    void UpdateDatabase();
}

现在,在我的WebUI程序集(这是一个MVC3项目)中,我想做类似以下的事情(在global.asax中):

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    var migrator = new DBMigrator();
    if (migrator.NeedsUpdating())
    {
        migrator.UpdateDatabase();
    }
}

此迁移器将使用.sql脚本(因此我可以让我的数据库版本由Subversion控制),并且可能在数据库中有一个表,告诉我针对模式执行了哪些脚本,以及还没有哪些脚本。所以,总结一下,我想我的实际问题是:

  1. 我是否正在通过版本控制(和自动化)数据库部署的正确方法?
  2. 我应该在什么时候检查(并应用)架构更改到我的项目,这应该真的是自动化还是开发人员的煽动?
  3. 我现在正在研究一些框架,例如DbUpMigratorDotNet,但我想先把我的策略放在首位,然后再采用一个框架。您如何处理数据库迁移?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

我找不到能够做到我想要的特定工具,所以在我的问题中遵循了惯例。如果有其他人遇到这个想要使用它,他们可以从这里抓住它:

NuGet Package Manager link

User Guide