1

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

但是 Subsonic 3.0 不向后兼容 Subsonic 2.2,这意味着,我的项目包含数百个用 subsonic 2.2 查询语言编写的代码文件,在 Subsonic 3.0 中将无法工作。

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

有没有人有这个能力,或者有没有人制作了一个自定义工具来帮助升级路径?

谢谢阅读

4

1 回答 1

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.DALYour.Namespace.LegacyDAL

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