有没有办法在Subsonic 2.2上使用T4模板

时间:2010-10-08 19:28:44

标签: templates t4 subsonic2.2

我知道Subsonic 3.0是最新最好的,我知道Subsonic 3.0有T4模板。

但是,Subsonic 3.0并不向后兼容Subsonic 2.2,这意味着我的项目包含用亚音速2.2查询语言编写的数百个代码文件在Subsonic 3.0中不起作用。

所以我的问题:是否有人为Subsonic 2.2制作t4模板来替换它创建的Generated文件。我的数据库很庞大,生成的文件数量有点疯狂。

是否有人使用此功能或是否有人制作了自定义工具来帮助升级路径?

感谢您阅读

1 个答案:

答案 0 :(得分:2)

SubSonic 3是一个巨大的核心重新编码,使用了一些新技术,如T4而不是它自己的模板,并提供了一个linq查询引擎。

但大多数旧的功能,如查询工具,仍然可用。

如果你这样做了:

var p = new Product();
p.ProductName = "new product";
p.Save();

或者

var p = DB.Select()
         .From<Product>()
         .Where(Product.ProductCode).IsEqualTo("1234")
         .ExecuteSingle<Product>();

这仍然适用于SubSonic3

如果你足够勇敢,我建议升级路径:

  • 确保您的DAL使用“generatenullableproperties = true”
  • 如果没有重新创建并修复可能的编译器/运行时异常:

    if (p.QuantityHasValue) p.Total = p.Quantity * p.Price;
    // changes to
    if (p.Quantity.HasValue) p.Total = p.Quantity * p.Price;
    
  • 将生成的文件的命名空间从Your.Namespace.DAL更改为Your.Namespace.LegacyDAL

  • 使用旧命名空间中的ActiveRecord模板创建DAL
  • 如果您使用InlineQuery,则类名已更改为CodingHorror
  • 修复所有编译器错误(可能生成的属性名称/类型有所不同)
  • 根据需要重写查询
  • 如果您正在使用亚音速迁移:坚持使用它们,因为SubSonic3中没有同等替换
  • 测试,测试,测试!!!直到一切正常
  • 仅为新任务使用subsonic3功能(例如linq)