When I started working on database independence, I realized that too many provider options can confuse non-technical users. I added a plugin property that indicates whether a separate database server is required.
/// <summary>Whether the database requires a server to be running.</summary>
bool NeedServer { get; }
/// <summary>Tests the database connection.</summary>
Task<bool> TestConnectionAsync(string connectionString, CancellationToken cancellationToken )
This gives the application enough information to present the available providers more clearly, without requiring users to understand the technical differences between them.
I publish the provider packages as ZIP files at https://ignatandrei.github.io/EFCore_DatabaseIndependence/ from the `deploy` branch. Keeping the providers there allows me to add or update them independently from the main NuGet packages.
The main branch contains three NuGet packages: `DaIn` for the shared interfaces, `DaIn10` for EF Core 10, and `DainLoader`, which downloads the selected provider locally and loads it into memory. Since `DaIn10` depends on the generic `DaIn`, both packages belong in the main branch.
( The DaIn10 also contains a reference to DainSettings, that saves the settings – but I embedded the settings with Tenekon.MSBuild.Packaging.ProjectBuildInPackage )
So Dain ( generic interface) and DaIn10 ( for EF10) stays on deploy branch to be deployed on github pages
And the Dain Loader stays on the main branch .
You can see the packages at https://www.nuget.org/packages?q=EFCORe_dain