Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
roji opened this issue Feb 22, 2019 · 1 comment
Open

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

roji opened this issue Feb 22, 2019 · 1 comment

Comments

@roji
Copy link
Member

roji commented Feb 22, 2019

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:

  • It is a DataTable-based API. This makes it both weakly-typed (promoting inconsistency across providers) and clunky to work with.
  • The API lacks some basic information and hasn't been updated in a long time
  • The API seems to have been conceived mainly for the Visual Studio data UI components (DDEX) and addresses primarily those needs.

Other comments:

This is somewhat related to #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
Copy link
Contributor

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.

  • It's a type indexed dictionary that most know from HttpContext.Features and it's a very good halfway option between something like DataTable — which is entirely untyped but endlessly extensible — and full rigidity found in the Java metadata apis where each new thing would have to go through api review and a BCL release.

  • The dictionary supplies customization and extensibility options and as the return types are strongly typed there's good discoverability from that point on.

  • For discoverability of the actual feature types, ASP.NET Core, and many community libraries, come with extension methods on HttpContext like GetEndpoint which returns the matched enpoint if you're using endpoint routing. All it does is delegate this work to IEndpointFeature via a call like context.Features.Get<IEndpointFeature>()?.Endpoint;

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.

@msftgits msftgits transferred this issue from dotnet/corefx Feb 1, 2020
@msftgits msftgits added this to the Future milestone Feb 1, 2020
@maryamariyan maryamariyan added the untriaged New issue has not been triaged by the area owner label Feb 23, 2020
@ajcvickers ajcvickers removed the untriaged New issue has not been triaged by the area owner label Jun 23, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants