0

我正在考虑使用 FluentNHibernate 作为我的 ORM,但我想知道如何最好地编写数据库部署部分。我之前有过实体框架和代码优先迁移的经验,但我对 FluentNHibernate 很好奇,所以我在玩。我看过FunnelWeb 博客,但我还没有时间真正了解他们是如何做的,所以我在项目的一个非常具体的部分寻求一些帮助,我希望有人可以总结一下。

我的 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. 我应该在什么时候检查(并应用)我的项目的架构更改,这真的应该是自动化的还是开发人员发起的?

我现在正在研究一些框架,例如DbUpMigratorDotNet,但在我为此采用框架之前,我想先把我的策略牢记在心。您如何处理数据库迁移?

4

2 回答 2

1

看看 FluentMigrator http://nuget.org/packages/FluentMigrator

于 2012-08-02T10:40:52.593 回答
0

我找不到可以满足我要求的特定工具,因此我按照我的问题中的约定制作了自己的工具。如果其他人遇到这个并想使用它,他们可以从这里获取它:

NuGet 包管理器链接

用户指南

于 2012-08-14T15:25:40.280 回答