Menu

Features (Very Long) Question

2004-09-07
2004-09-10
  • Francisco José Peredo Noguez

    This is a list for the IDEAL O/R Framework is somewhat based on a similar list in ObjectRelationalToolComparison (Very similar to this list just for Java instead of DotNET.) but has a lot of .NET specific "extra-features". I am 100% sure there is no ORM .NET product that matches all this requirements, but I would like to know how close ORM.NET is to the "Ideal"

    * 1. Release Version Number (To indicate which version has been refered to, Maturity)
    * 2. "Free" as in "free beer" - no license fee
    * 3. "Free" as in "free speech" - source available
    * 4. Has mapping GUI (For DataBase to Objects, and Objects to Database)
    * 5. .NET ErrorProviderSupport? and DataBinding? Support (without me coding ANYTHING) for WindowsForms.NET
    * 6. Does not requires manual SQL building, but can easily accept SQL based queries.
    * 7. RDBMS support/independence, and the user can easily add support for other databases or persistent mechanisms (XML, Prevalence, etc).
    * 8. Integration with an MVC framework (like User Interface App Block) o Metaframework (SpringFramework in Java, for example) for both ASP.NET and WindowsForms (Why we need ObjectRelationalIntegrationWithModelViewController?)
    * 9. Supports relationships between objects (User can choose the names and types of the foreign keys)
    * 10. Mapping supports grouping (GROUP BY clause)
    * 11. Mapping supports aggregate functions (count(), avg(), etc.)
    * 12. Includes full support of lazy resolution of all queries
    * 13. Maintains single identities for objects returned from queries (aka "uniquing") (i.e., AddressFinder?.findById(1) == AddressFinder?.findById(1));
    * 14. Resolves Circular Identities (aka "uniquing") (i.e., "account == account.getCustomer().getAccount()")
    * 15. Generates Mapping as well as the Objects themselves, so you don't duplicate information in the .NET Objects and the related mapping information.
    * 16. Supports Composite Primary Keys (I don't like this, but sometimes is useful for legacy applications)
    * 17. Aggregate Mappings - Single field maps to multiple fields in database. http://martinfowler.com/eaaCatalog/embeddedValue.html
    * 18. Supports both many to many and one to many associations
    * 19. Supports collections of Strings, Integers, Dates, etc
    * 20. Supports inheritance / polymorphic queries
    * 21. Supports one to one associations
    * 22. Can fetch associated objects using SQL outer joins
    * 23. Support for optimistic locking / versioning
    * 24. Support for Unit of work / object level transactions
    * 26. Providing an ODMG compliant API and/or OCL and/or OPath
    * 27. Does NOT require "extra" database tables holding locks, metadata, etc.
    * 28. Supports multiservers (clustering) and simultaneous access by other applications without loss of transaction integrity
    * 29. This is a question: Requires code generation?
    * 30. This is a question: Requires RuntimeReflection??
    * 31. Query Caching - Built-in support (developer writes no code). The following two identical queries will hit the database only once. The second time cached results will be returned. Address address = AddressFinder?.selectByPrimaryKey(new Long(1)); assertTrue(address == AddressFinder?.selectByPrimaryKey(new Long(1)));
    * 32. Supports sequences and identity/autoincrement columns for primary key generation (Not using the incorrect SELECT MAX method!)  (The user can choose the name and type of the primary key field)
    * 33. Supports ternary associations
    * 34. Supports mapping of one class to multiple tables ( Sometimes legacy databases leave you no choice.)
    * 35. Supports mapping of multiple classes to one table
    * 36. Supports persistence of properties through private fields (Not very important for me, but I am curious)
    * 37. Supports persistence of properties through accessors (get/set methods or properties, and they can be private)
    * 38. Supports disconnected operations: Populate objects from database, disconnect, create/remove/modify objects (on client, another Process) and apply changes to database (much) later
    * 37. Support for ASP.NET (Visually?, Out of the box).
    * 38. Support for Remoting (Visually?, Out of the box). Distributed Objects.
    * 39. Support for WebServices (Visually?,Out of the box).
    * 40. Support for information exchange with System.Data.DataSet?.
    * 41. In memory object filtering (Specifically ask for a complex filter on an ArrayList of Objects without hitting the database)
    * 42. Batch Update (Update lots of objects without object creation).
    * 43. Batch Delete (Delete lots of objects without object creation, for example this is very useful in Cascade Delete for ToMany? relationships).
    * 44. Saving Changes with one line of code (ObjectsEngine?.CommitAllChanges?()), does all the inserts, deletes and updates in the right order, without user intervention, and without violating Master/Detail relationships.

    You may have noticed that some features ask the question "Visually?", being able to visually databind your objects to the UI (and show errors with an ErrorProvider) is a very important feature for an O/R mapper in the .NET world (because, if a lot of users are going to want the ease of use of the DataSet when using your O/R Mapper in the development of WinUI (WindowsForms.NET) or WebUI (ASP.NET) applications

     
    • Francisco José Peredo Noguez

      By the way, I would like to add your answers to this questions to the Wiki in
      http://c2.com/cgi-bin/wiki?ObjectRelationalToolComparisonDotNet

      To begin having a detailed comparision between ORM frameworks. Is this fine with you?

       
    • Dan

      Dan - 2004-09-10

      Fine with me.
      Here is a breakdown on the current version of ORM.NET.
      Version 2.0 will address some more of these features, and I will update when it becomes available.

      Y 1. Release Version Number (To indicate which version has been refered to, Maturity)
      Y 2. "Free" as in "free beer" - no license fee
      Y 3. "Free" as in "free speech" - source available
      N 4. Has mapping GUI (For DataBase to Objects, and Objects to Database)
      N 5. .NET ErrorProviderSupport? and DataBinding? Support (without me coding ANYTHING) for WindowsForms.NET
      Y 6. Does not requires manual SQL building, but can easily accept SQL based queries.
      N 7. RDBMS support/independence, and the user can easily add support for other databases or persistent mechanisms (XML, Prevalence, etc).
      N 8. Integration with an MVC framework (like User Interface App Block) o Metaframework (SpringFramework in Java, for example) for both ASP.NET and WindowsForms (Why we need ObjectRelationalIntegrationWithModelViewController?)
      Y/N 9. Supports relationships between objects (User can choose the names and types of the foreign keys)
      N 10. Mapping supports grouping (GROUP BY clause)
      N 11. Mapping supports aggregate functions (count(), avg(), etc.)
      N 12. Includes full support of lazy resolution of all queries
      N 13. Maintains single identities for objects returned from queries (aka "uniquing") (i.e., AddressFinder?.findById(1) == AddressFinder?.findById(1));
      Y 14. Resolves Circular Identities (aka "uniquing") (i.e., "account == account.getCustomer().getAccount()")
      Y 15. Generates Mapping as well as the Objects themselves, so you don't duplicate information in the .NET Objects and the related mapping information.
      Y/N 16. Supports Composite Primary Keys (I don't like this, but sometimes is useful for legacy applications)
      N 17. Aggregate Mappings - Single field maps to multiple fields in database. http://martinfowler.com/eaaCatalog/embeddedValue.html
      N 18. Supports both many to many and one to many associations
      N 19. Supports collections of Strings, Integers, Dates, etc
      N 20. Supports inheritance / polymorphic queries
      Y 21. Supports one to one associations
      N 22. Can fetch associated objects using SQL outer joins
      N 23. Support for optimistic locking / versioning
      N 24. Support for Unit of work / object level transactions
      N 26. Providing an ODMG compliant API and/or OCL and/or OPath
      Y 27. Does NOT require "extra" database tables holding locks, metadata, etc.
      N 28. Supports multiservers (clustering) and simultaneous access by other applications without loss of transaction integrity
      Y 29. This is a question: Requires code generation?
      Y 30. This is a question: Requires RuntimeReflection??
      N 31. Query Caching - Built-in support (developer writes no code). The following two identical queries will hit the database only once. The second time cached results will be returned. Address address = AddressFinder?.selectByPrimaryKey(new Long(1)); assertTrue(address == AddressFinder?.selectByPrimaryKey(new Long(1)));
      N 32. Supports sequences and identity/autoincrement columns for primary key generation (Not using the incorrect SELECT MAX method!) (The user can choose the name and type of the primary key field)
      ? 33. Supports ternary associations
      N 34. Supports mapping of one class to multiple tables ( Sometimes legacy databases leave you no choice.)
      N 35. Supports mapping of multiple classes to one table
      N 36. Supports persistence of properties through private fields (Not very important for me, but I am curious)
      N 37. Supports persistence of properties through accessors (get/set methods or properties, and they can be private)
      Y 38. Supports disconnected operations: Populate objects from database, disconnect, create/remove/modify objects (on client, another Process) and apply changes to database (much) later
      N 37. Support for ASP.NET (Visually?, Out of the box).
      N 38. Support for Remoting (Visually?, Out of the box). Distributed Objects.
      N 39. Support for WebServices (Visually?,Out of the box).
      Y 40. Support for information exchange with System.Data.DataSet?.
      Y 41. In memory object filtering (Specifically ask for a complex filter on an ArrayList of Objects without hitting the database)
      N 42. Batch Update (Update lots of objects without object creation).
      N 43. Batch Delete (Delete lots of objects without object creation, for example this is very useful in Cascade Delete for ToMany? relationships).
      Y 44. Saving Changes with one line of code (ObjectsEngine?.CommitAllChanges?()), does all the inserts, deletes and updates in the right order, without user intervention, and without violating Master/Detail relationships.

       

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.