dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
15.04k stars 4.68k forks source link

ADO.NET metadata/feature/capability discovery API #28763

Open roji opened 5 years ago

roji commented 5 years ago

There is a need for providers to expose capabilities/features/metadata to ADO.NET API consumers (or upper layers such as Dapper/Entity Framework). As an example, the introduction of a new batching API is now under discussion (#35135), and there's a need for providers to inform users whether the API has been implemented or not.

ADO.NET does have a database schema and metadata API, which contains the DataSourceInformation, providing something like this. It is problematic for the following reasons:

Other comments:

This is somewhat related to dotnet/runtime#19324, which is more about getting the database schema (rather than metadata/capabilities).

Note that we don't necessarily intend to work on this right away. In the meantime it should be possible to augment the older ADO.NET metadata DataTable-based API.

NinoFloris commented 5 years ago

There is a need for this in Dapper as well.

As to the actual design, if I were to design something like this I would take some good inspiration from ASP.NET Core's FeatureCollection type, something like it could very well be a good fit.

This could work very well for the growing landscape of fundamentally different database drivers. At least it won't require anybody to try (and fail) to predict all current and future use-cases while speccing the api.