【问题标题】:Is there any new ORM for Delphi 2010? [closed]Delphi 2010 有新的 ORM 吗? [关闭]
【发布时间】:2010-05-31 08:53:23
【问题描述】:

Delphi 2010 有关于 RTTI 的新特性,我读到这将使 ORM 工具和更简洁的代码更容易。

但我没有发现任何 ORM 包含这些功能。

您认为 Embarcadero 是否应该构建一个并将其包含在 Delphi 中

【问题讨论】:

  • 我认为目前厂商不值得专门针对 D2010
  • @Marco:Delphi 2010 引入了扩展 RTTI,它需要序列化/反序列化所有对象字段(包括私有和受保护),以及属性,这是向类定义添加元数据的一种非常强大的方法
  • 我投票结束这个问题,因为它是一个开放式的意见问题。
  • 我最初投票决定关闭它是基于意见,但我们是否应该不让它开放,因为社区显然已经接受它并提供了非常有用的信息?

标签: delphi orm delphi-2010


【解决方案1】:

Spring 框架(使用 Delphi 2010 扩展 RTTI)在其路线图上有一个实体框架:

http://code.google.com/p/delphi-spring-framework/

Delphi Spring 框架是一个 国际开源项目, 其使命是提供强大的 基础设施框架,将 帮助 Delphi 开发人员建立稳固的, 灵活可扩展的企业 基于应用程序和类库 在 Embarcadero® Delphi® 2010 上 Win32平台。

【讨论】:

    【解决方案2】:

    另一个刚刚发布的 Delphi 2010+ ORM 是 DORM。它确实利用了新的 RTTI 特性,并且能够持久化任何普通的 Delphi 对象。

    不妨看看像 mORMot 这样的 Client-Server ORM - 它适用于 Delphi 2010 - Client-Server 维度在 SOA 中值得一提世界。

    【讨论】:

    【解决方案3】:

    DORM,Delphi ORM 是一个新的用于 Delphi 的 ORM 开源框架,可从 DelphiXE+ 使用(它应该也可以在 D2010 上工作,但没有在那个版本上测试过)。它支持(并使用)所有新的 RTTI 功能。允许文件、属性和约定优于配置映射。有基于它的大型生产系统。自下一个主要版本以来,它将被集成到 Delphi Spring Framework 中。 它由一个小型国际社区(6 人)开发。 http://code.google.com/p/delphi-orm/

    为了展示一些基本功能,这是一个实际使用的单元测试。

    procedure TTestDORM.TestCRUD;
    var
      p1: TPerson;
      p1asstring: string;
      id: integer;
    begin
      p1 := TPerson.NewPerson;
      try
        Session.Save(p1);
        p1asstring := p1.ToString;
        id := p1.id;
        Session.Commit;
      finally
        p1.Free;
      end;
    
      Session.StartTransaction;
      p1 := Session.Load<TPerson>(id);
      try
        CheckEquals(p1asstring, p1.ToString);
        Session.Commit;
      finally
        p1.Free;
      end;
    
      Session.StartTransaction;
      p1 := Session.Load<TPerson>(id);
      try
        p1.FirstName := 'Scott';
        p1.LastName := 'Summer';
        p1.Age := 45;
        p1.BornDate := EncodeDate(1965, 1, 1);
        Session.Update(p1);
        p1asstring := p1.ToString;
        Session.Commit;
      finally
        p1.Free;
      end;
    
      Session.StartTransaction;
      p1 := Session.Load<TPerson>(id);
      try
        CheckEquals(p1asstring, p1.ToString);
        Session.Delete(p1);
        Session.Commit;
      finally
        p1.Free;
      end;
    
      Session.StartTransaction;
      p1 := Session.Load<TPerson>(id);
      try
        CheckNull(p1);
        Session.Commit;
      finally
        p1.Free;
      end;
    end;
    

    附:我是 DORM 的主要作者和主要作者

    【讨论】:

    • 值得一提的是,谷歌代码上的 DORM 分支也很少(尤其是 Robert Love 的分支)。
    • @Daniele 几个月前我在回答中引用了 DORM。 :)
    【解决方案4】:

    TMS Aurelius 使用最近 Delphi 版本中引入的新 RTTI 功能。它还使用泛型、运算符重载和其他新的 Delphi 特性,使其仅与 Delphi 2010 及更高版本兼容。

    【讨论】:

      【解决方案5】:

      你到底在说什么功能?

      Delphi 有几个 ORM:ORM for DELPHI win32

      【讨论】:

      • 这些都不是 Delphi 2010 的 RTTI 独有的。
      • 为什么需要专有 ORM?
      • 支持 Delphi 2 到 2010 的 ORM 外观如何?它将使用可用语言功能的最小公分母。所以更好地只支持 2010+ 并在 ORM API 中使用扩展的 RTTI 和属性,就像 .Net 和 Java 平台的 ORM 一样。
      • 您选择了错误的 ORM。首先定义您对 ORM 的一些要求,然后搜索提供您需要的所有功能的要求。无论它是否适用于从 2 到 2010 的所有版本的 Delphi。最重要的是它可以满足您的一切需求。其他都无关紧要。
      【解决方案6】:

      尝试在http://www.tpersistent.com/中使用hcOPC(开源项目)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-05
        • 2010-09-25
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多