如何将SubSonic 3“SimpleRepository”更改应用于生产系统

时间:2009-10-25 23:54:14

标签: .net subsonic subsonic3

我一直在玩SubSonic的SimpleRepository,它真棒。但是,我想知道是否有一种简单的方法可以将挂起的更改应用到生产系统。

以前,我通过批处理文件使用了SubSonic 2的“迁移”;当我准备好转向生产时,我只是针对生产服务器运行所有挂起的迁移,我准备好了。好又简单。

SimpleRepostitory采用更多“在需要时运行它们”的方法进行迁移,但我不想在生产时保留该选项。

有没有办法获得待定更改列表?我知道我可以使用类似SqlDiff的东西,但由于之前我有一个可行的解决方案,丢失它会很遗憾......

任何?

2 个答案:

答案 0 :(得分:0)

如果使用reflector,您可以轻松找到SimpleRepository如何管理迁移。

我实际上没有尝试过这段代码,但你可以像SimpleRepository那样简单地进行迁移:

  • 创建一个新的Migrator,将Assembly传递给构造函数。
  • 如果要使用交易,请创建BatchQuery
  • 遍历要迁移的类型,通过在迁移器对象上调用MigrateFromModel方法获取SQL字符串
  • 如果要使用BatchQuery,请创建一个新的QueryCommand并将对象传递给BatchQuery的QueueForTransaction方法。

以下是Reflector中的方法:(关于MigrateFromModel如何确定需要更改的内容的逻辑留给读者的练习:))

private void Migrate<T>() where T: class, new()
{
    Type item = typeof(T);
    if (!this.migrated.Contains(item))
    {
        BatchQuery query = new BatchQuery(this._provider);
        Migrator migrator = new Migrator(Assembly.GetExecutingAssembly());
        foreach (string str in migrator.MigrateFromModel(item, this._provider))
        {
            query.QueueForTransaction(new QueryCommand(str, this._provider));
        }
        query.ExecuteTransaction();
        this.migrated.Add(item);
    }
}

答案 1 :(得分:0)

您是否有机会打包并将其分享回项目? :)

我一直在使用更多“穷人”的迁移解决方案,但它没有回滚或其他功能。