Supported databases: Sql Server, Sql Azure, My Sql, Sqlite, Oracle, PostgreSql.
Small, Fast, Simple to use and understand.
This ORM strives to provide as much detailed information available in any exceptions that are thrown, and we encourage any feedback to improve developer support. In some cases we augment information to database vendor errors. In some cases labels are required in method calls to aid in problematic sql, for example Label="Query Managers", so if the sql throws an error, that lable will be in the exception to help the developer track down the problem call.
Fully disconnected, poco's can move across application boundaries from client to service layer and perform all crud actions. Perfect for 3-tier development. This ORM does not track changes to objects or cache anything inside a context object.
Supports transactions, and helps developers perform multiple database actions with-in a single transaction.
No inheritance requirements, uses either interface implementation or attributes to define the mapping of the object to the sql results.
No configuration files, and no crazy designers. Supports custom data type mapping from .net types to database types.
Parallel Load support, run multiple queries in parallel and returns the results when done, and the result sets are ordered as sent. Also supports execution of mixed Serial and Parallel working sets for complex database operations.
Allows developers to write sql for reading data, the ORM just maps the results to the object. The ORM does provide simple loads based on id for single objects. All queries use a wrapper to force usage of parameterized sql and actively checks for injection issues. Inserts, Updates and Deletes do not require any sql, this a dynamically built using the attributes. Updates support concurrency checks using a timestamp column and related poco property.
Added LoadAbstractItems methods, same as parallel versions but serial.
Rework of the create instance code.
Adding support for dynamic creation of IDatabaseTypesFactory with-out adding a reference to the Data provider library.
Not sure why I never added support for it as I have been doing this in the Symbiotic Helper for years.
Added ability to override the date used when setting row version property during creates and updates. Was using DateTime.Now, there is now a new method on the IDatabaseTypesFactory called ObtainCurrentDateTime() to provide the date and time.
It now defaults to DateTime.UtcNow but if you set IDatabaseTypesFactory.ObtainCurrentDateTimeDefaultsToUTC = false it will use DateTime.Now.
This is a change to be aware of, I feel the best default is to use DateTime.UtcNow.
Improving the DatabaseActionProcessor, also working on improving the unit tests.
The DatabaseActionProcessor simplifies performing mixed database operations. For example performing reads with writes under a shared transactions or mixing parallel and serial sets of operations while simplifying troubleshooting problems during development.
Fixed a couple missing usages of timeout in ObjectLoader.ObtainHierarchy.
More improvements to DatabaseActionProcessor. Added item isolation for errors created when processing actions. Added example unit test to demonstrate the process of isolating a specific action.
Working on simplifying unit tests. Will make separate unit test classes and corresponding classes and scripts to demonstrate the various types of functionality.
Example: SimpleCrudTests.cs, SimpleCrudTests.sql
Working on breaking up the unti test into smaller classes.
This will simplify the documentation of features and make it easier for a new developer to get started using Symbiotic.
For cases where the relation table method is used for relationships, if the child property is not a collection, the orm no longer loads all the children if multiple exist. The behavior now is to load the first child from the database.
Fixed a bug when a developer overrides the relation column names in the DatabaseRelationTable attribute. It was not honoring the override of parent column name.
Added unit tests to test relation column name overrides.
Replaced some regular collections with thread Concurrent related types.
Added DateTimeOffset to the types unit tests, to ensure DateTimeOffset is supported.
Discovered that some thrown errors while performing loads were throwing DatabaseWriteException. I created a new class to handle command processing and it now throws DatabaseWriteException for writes and DatabaseReadException for reads.
Discovered that when an object attempts to use encryption with-out implementing IObjectChangedSupport, the orm does not provide proper feedback. Now if the object does not implement , it will throw a InvalidEncryptionObjectException exception.
Finished breaking up the unit test into smaller classes.
Change implementations of IDatabaseTypesFactory.PropertyTypeToDatabaseType to throw UnmappedDotNetToDatabaseTypeException when a mapping is not found, was throwing an ArgumentException.
Modified RelationSqlBuilder to use parameters for the parent and child ids.
Changed DeprecatedItem.DeprecationId to an integer type.
Fixed a bug where items were manually created instead of using the IDatabaseTypesFactory.CreateSqlAppender
Reworked unit tests for Postgresql and guid ids.
Started on Nuget package. RC 2.1 built and deployed.
Removed build output folders to reduce size of Nuget package.
- System.Data.Common (>= 4.3.0)