Symbiotic_Micro_ORM_Net_Standard_x64 3.2.1

.NET Core 2.0 .NET Standard 2.0 .NET Framework 4.6.1
Install-Package Symbiotic_Micro_ORM_Net_Standard_x64 -Version 3.2.1
dotnet add package Symbiotic_Micro_ORM_Net_Standard_x64 --version 3.2.1
<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
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Symbiotic_Micro_ORM_Net_Standard_x64, 3.2.1"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. 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
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

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 Versions
.NET net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows
.NET Core netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1
.NET Standard netstandard2.0 netstandard2.1
.NET Framework net461 net462 net463 net47 net471 net472 net48
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen40 tizen60
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
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 142 1/29/2022
3.2.0-rc 115 10/20/2021
3.1.0 386 8/31/2020
3.1.0-rc 308 8/23/2020
3.0.0 668 1/15/2019
3.0.0-rc 480 1/13/2019
2.1.6 685 8/18/2018
2.1.5 764 8/8/2018
2.0.4 786 1/3/2018
2.0.2 852 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.