Symbiotic_Micro_ORM_Net_Standard_x64 3.2.1

dotnet add package Symbiotic_Micro_ORM_Net_Standard_x64 --version 3.2.1                
NuGet\Install-Package Symbiotic_Micro_ORM_Net_Standard_x64 -Version 3.2.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Symbiotic_Micro_ORM_Net_Standard_x64" Version="3.2.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Symbiotic_Micro_ORM_Net_Standard_x64 --version 3.2.1                
#r "nuget: Symbiotic_Micro_ORM_Net_Standard_x64, 3.2.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Symbiotic_Micro_ORM_Net_Standard_x64 as a Cake Addin
#addin nuget:?package=Symbiotic_Micro_ORM_Net_Standard_x64&version=3.2.1

// Install Symbiotic_Micro_ORM_Net_Standard_x64 as a Cake Tool
#tool nuget:?package=Symbiotic_Micro_ORM_Net_Standard_x64&version=3.2.1                

Supported databases: Sql Server, Sql Azure, My Sql, Sqlite, Oracle, PostgreSql, DB2\LUW, Firebird.
Fast, small and simple, and very little code needed to perform database actions.
Ability to write and run all code unchanged on multiple database vendors.
No configuration, no mapping files, no inheritance requirements, no object tracking or caching, just objects and code.
Supports writes, updates, or upserts with out the need to write sql, just write your queries for the parent objects.
Totally disconnected writes, they can move across application boundaries.
Write your own queries, the orm just maps the results.
Full transaction support, make multiple calls inside a single transaction.
Read and Write isolation, you must use different object for reads and writes.
Built in history and performance tracking support.
Error tracking, extensive commitment to helping developers understand all exceptions thrown, extensive detailed error messages are provide when possible.
Supports change tracking, so the database is only involved when you decide it's necessary.
Encryption, allows data to be encrypted prior to writes, and allows un-encryption with loads.
Validation support, extensive support for System.ComponentModel.DataAnnotations with the ability to extend and create custom validation with enforcement from the orm.
Processing Intercept Support, do special work prior to insert, update, or delete, or after load.
Parallel support, run multiple queries in parallel to increase performance.
Debugging, all sql is traced out with the parameters and values to aid trouble-shooting. Queries can contain locators which are provided in exceptions.
Developer control, all the object creates are overidable, and most methods can be overridden.
Supports mutable flat, pure immutable types or hierarchical objects, or objects with children or child properties.
Interface abstraction by allowing you to query and retrieve interface types while loading concretes types.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 is compatible.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 is compatible.  net462 is compatible.  net463 was computed.  net47 was computed.  net471 is compatible.  net472 is compatible.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
3.2.1 1,513 1/29/2022
3.2.0-rc 1,125 10/20/2021
3.1.0 1,628 8/31/2020
3.1.0-rc 1,399 8/23/2020
3.0.0 1,958 1/15/2019
3.0.0-rc 1,600 1/13/2019
2.1.6 1,906 8/18/2018
2.1.5 1,984 8/8/2018
2.0.4 2,033 1/3/2018
2.0.2 2,065 9/12/2017

Revision 3.2.0

Fixed a few Sql Tracer comment labels.
Researching an idea to allow querying an unknown schema.

Building support to allow querying an unknown schema with-out a schema specific poco.
This will allow you to query a database with-out a schema specific poco, like a old fashioned data reader.
I call it UniversalDataStorage.

Have first working example to support UniversalDataStorage.

Couple issues I ran into as a developer using my orm that I want to make it easier for the developer to discover.
#1 Forgot to set IObjectChangedSupport.IsNew for a new object when using HashedFieldAttribute for a password.
#2 Using IObjectWriter.Create instead of IObjectHierarchyWriter.CreateHierarchy

I was a bit confused at first, but soon figured it out but a regular dev would probably be lost. I need to think about a solution.

Discovered a need to re-encrypt fields, thinking about the best approach to supporting the need.

#1. Improve sql validators to allow targeting all or specific sql statements. All, Insert, Update.
#2. Ensure Updates and Delete statements ensure a WHERE clause exists.

Fixed a bug where a ObjectWriter.ExecuteNonQuery(ISqlQuery) was not committing the transaction

*** NOTE: [Breaking change, renamed] ***
Fixed spelling of IImmutableObjecttWriter to IImmutableObjectWriter and  IDatabaseTypesFactory.CreateImmutableObjecttWriter() to IDatabaseTypesFactory.CreateImmutableObjectWriter()

Started designing the new Mutable interface which will replace IObjectWriter/IObjectHierarchyWriter with IMutableObjectWriter.
This new design will use a request objects similar to the IImmutableObjectWriter design. Majority of code is the same but refactored to use request objects.
Added new unit test class with names ending in "Mutable" to test the new api.

Still working on IMutableObjectWriter design, have basic CRUD, and change tracking support working.

Added a new property ISqlQuery.ShouldReplaceAtSymbolWithDatabaseTypeSpecificParameterSymbol.
Indicates that the @ symbol should be replaced with the parameter symbol specific the DatabaseType.
Uses IDatabaseTypesFactory.ObtainDatabaseParameterCharacter

Still working on IMutableObjectWriter design, have encryption and Execute Queries support working.

ISqlQuery.AutoCleanup was made obsolete. Please use ISqlQuery.ShouldCloseConnectionAndTransaction instead.

Still working on IMutableObjectWriter design, have IObjectChangedSupport, Validation, Concurrency and IProcessingInterceptSupport working.
Working on Hierarchy support now, Relation tables seems to be working but needs more testing.

Still working on IMutableObjectWriter design,
Relation tables with GUID primary keys, OneToMany, OneToOne and Single Object relationships are working.

Todo: The Immutable request object creations needs to use the IDatabaseTypesFactory for the creates. started on some of them.
Still working on IMutableObjectWriter design, Working on Advanced Hierarchy

IMutableObjectWriter design is completed and unit tests working.
Added more xml comments.

Doing some refactoring, added more xml comments and preparing for nuget deployment.

Updated Symbiotic.Relationships.docx, added documentation for Single Object relationships.

Renamed IDatabaseTypesFactory.CreatedSqlBuilder to IDatabaseTypesFactory.CreateSqlBuilder

Added mutable versions of example unit tests for other .net languages cs and

Troubleshooting a user's null reference error while calling .CreateHierarchy() and using a One To Many relationship.
There was a bad parameter for DatabaseRelationOneToMany Attribute, but the parameter name and description is bad.
This could have happen for DatabaseRelationOneToOne also.

I now throw a better exception to explain the problem.
"Unable to find property named {rel.ParentColumnName} on type {ir.GetType().FullName}. Check {NameOf(DatabaseRelationOneToManyAttribute)} parameters."

Devise unit tests to test all the attributes for bad parameters. I do know most are tested but a few of the relationship attributes may have a few holes.
Figure out how to rename the badly names parameter names. I did change the descriptions of these parameters.