Small and simple to use and understand.
Full object hierarchy CRUD support. Saves all object properties and the relationships to related tables. Also supports collection properties.
Allows developers to write sql as needed for reads. The design just maps the results to the objects. Writes are tightly coupled to the database and build on primary key constraints.
No inheritance requirements, uses either interface implementation or attributes.
Allows developers to modify the relation sql to further optimize loading of children.
Database constraints tolerant.
Lazy initialization support, with child sql override.
Change trackng support to history tables.
Supported databases: Sql Server, Sql Azure, My Sql, Sqlite, Oracle, PostgreSql.
Built-in Performance tracking, implement IPerformanceTracking to allow performance tracking of all database actions.
Optimistic concurrency support.
No configuration files needed.
Trace output of SQL statements and parameter values.
Password one way hashing support.
Field level encryption with auto decrypt upon load ability.
Processing intercept support, BeforeInsert, BeforeUpdate, BeforeDelete, AfterLoad.
Database deprecation support.
Parallel Load support.
Tested Symbiotic ORM on Sql Azure, seems to work, but the performance is slow due to Sql Azure.
Synchronized unit test between the c# and vb.net versions. Added a few more comments.
More improvements to thrown errors for datetime vs datetime2.
Added new overloads ObtainHierarchy by id loads, to include a transaction parameter. This allows database loads using the same transaction.
Added new overloads InsertUpdateHierarchy to include a IEnumerable parameter and various related overloads with transactions.
Renamed some parameter names.
Added a bunch of method comments.
Added another ObtainItems overload method to IObjectLoader.
Added FrozenElephant to assembly name, not sure how I missed that.
Addeded more documentation details to explain where the nuget output folders are, seems that has changed,
they are now located at: C:\Users\[user]\.nuget\packages\symbiotic_micro_orm_net_standard_x64\2.0.2\DataProviders
Made SqlBuilderSqlServer.CreateObjectMapper overridable.
Removed unused ObjectFactory class.
Refactored some object creation calls to call IDatabaseTypesFactory instead.
Added AttributeUsage attribute to some of the ORM custom attributes, this should help prevent mistakes from developers. Currently the attributes are either at the class or property level.
Added method ShouldPerformValidation to ISqlQuery interface.
Improved the error message to include object type names for exceptions throw for DatabasePrimaryKeyColumnNotFoundException. This should help developer quickly fix the problem.
Added more comments for Lazy load unit tests to improve developer and documentation support.
Improved and replaced exceptions thrown when performing Lazy loads of relationships. ORM was throwing ArgumentOutOfRangeException, it now throws a RelationPropertyNotFoundException. The message was also improved to include the object type names.
Fixed a bug in Lazy loads where the sql is specified in the DatabaseRelationTable attribute, see the LazyPerson2 object and the new unit test LazyHierarchyCustomSqlInRelationAttribute.
Fixed a bug in non-lazy Hierarchy loads, the child relations now use sql specified in the DatabaseRelationTable attribute.
Improved support for IDatabaseDefineSupport. If the developers implements a relationship incorrectly the ORM silently failed to save the relationship. The ORM now throws a InvalidRelationshipTypeException and provides the class name of the parent object.
I discovered this problem when I tried to load the previously saved object and noticed that the related child object was missing as was the relationship link between them.
- System.Data.Common (>= 4.3.0)