One of the newest ORM entries into the commercial market is EntityDAC from Devart. If you are a Delphi developer you have probably heard of Devart, even if you haven’t actually used one of their products. The company has been developing Delphi based technology since 1997 when they released their Oracle Data Access Components (ODAC). Devart has specialized in data access related technologies, and since Delphi has predominantly been used to develop database centric applications, if you haven’t heard of Devart, chances are you were living under a rock somewhere.
While there are numerous ORM/OPF solutions available for Delphi, only a few use the latest language features of Object Pascal. hcOPF, TiOPF, InstantObjects, DObject were all conceived prior to the appearance of generics, anonymous methods, and the new RTTI which has opened the door to dependency injection, and other modern best practices previously not available to Delphi developers. That is not to say that none of these frameworks have adopted newer language features, just that they were not initially written with them or require newer versions of Delphi. mORMot is an exception. Of the current ORMs (if I missed one please let me know), only TMS Aurelius, DORM and now EntityDAC require a later version of Delphi (2007 and up).
In August 2014, Devart released the first version of EntityDAC for the Delphi platform. EntityDAC builds on 18 years of expertise Devart has acquired developing database drivers and other ORM related products such as LinqConnect, EntityDeveloper (a designer for DB models) and dotConnect. There have been several updates since it’s release, so unlike many open source solutions, you know it is actively being improved.
EntityDAC uses an object TDataSet descendant to present data, and recommends the usage of data aware controls to enforce validation so for Delphi developers used to using TDataSets it is as close to a drop in replacement as you can get. EntityDAC supports Lazy Loading, Code-First, Model-First, or DataBase-First design, and is well documented.
One of the coolest features that I always wanted to implement for hcOPF was visual object design. A complementary product; Entity Developer is bundled with EntityDAC. It allows you to reverse engineer a database and create Delphi business objects as well as designing them from scratch. It can then generate your model code so you can immediately start consuming your business objects. Entity Developer is a Visual Studio shell based application that is also capable of using T4 templating supported in that IDE, so you can tweak the code generation as you see fit.
One of the questions I debated with other developers when I first wrote hcOPF was whether the ORM should support PODO (Plain Old Delphi Objects aka TObject descendants) as well as those descending from my base class ThcObject. Limited RTTI precluded that possibility back in Delphi 3, and I have even interfaced ThcObject to experiment with enabling developers to use RefCounted PODO objects. With EntityDAC you can use either TObject or TEntityObject as your base class. It also supports using Delphi attributes to determine the database mapping or XML files.
Not only is the solution very flexible in terms of the workflows supported, the getting started Wizard makes it easy to get an application up and running, and an example app showcases some of it’s capabilities. The icing on the cake has to be LINQ which enables you to remove the SQL from your code and the coupling to the database it represents.
While I would love to dig deeper into EntityDAC, this is already getting to be a long post so perhaps I will write subsequent ones if there is enough interest. Suffice to say, if you are looking for a commercial ORM solution backed by a company with almost 20 years experience in delivering high performance database centric solutions, I would recommend evaluating EntityDAC.