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

Can Strongly Typed Convenience Methods be Added? #313

AdamDotNet opened this issue Aug 22, 2017 · 3 comments

Can Strongly Typed Convenience Methods be Added? #313

AdamDotNet opened this issue Aug 22, 2017 · 3 comments


Copy link

@AdamDotNet AdamDotNet commented Aug 22, 2017


Most/all ADO.Net providers I've used have returned their specific types instead of the System.Data.Common types. An example is PostgreSQL:CreateCommand().

Are you opposed to these convenience methods?

Taking a glance at 0.25.1 code, seems like, for example, it could be changed from:

protected override DbCommand CreateDbCommand() => new MySqlCommand(this, CurrentTransaction);


/// <summary>
/// TODO: Documentation
/// </summary>
/// <returns></returns>
public new MySqlCommand CreateCommand() => new MySqlCommand(this, CurrentTransaction);

protected override DbCommand CreateDbCommand() => CreateCommand();

It would be good to apply these kinds of changes to all applicable DbConnection, DbCommand, etc. methods as well. This would make provider specific, and helpful, APIs become more visible and reduce friction from always having to cast from the common types. Example: #127, you can't see AddWithValue unless you cast.

Copy link

@bgrainger bgrainger commented Aug 25, 2017

Here are the "public new" methods in Connector/NET, which could be cloned for API compatibility (ticks by the ones that already exist):

public new MySqlConnection Connection { get; set; }
public new MySqlParameterCollection Parameters { get; } ✔️
public new MySqlTransaction Transaction { get; set; }
public new MySqlParameter CreateParameter()
public new MySqlDataReader ExecuteReader()
public new MySqlDataReader ExecuteReader(CommandBehavior)

public new MySqlTransaction BeginTransaction() ✔️
public new MySqlTransaction BeginTransaction(IsolationLevel)
public new MySqlCommand CreateCommand()

public new void Dispose() 😱

public new MySqlParameter this[int index] { get; set; } ✔️
public new MySqlParameter this[string name] { get; set; }

@bgrainger bgrainger added this to the 1.0 milestone Aug 25, 2017
@bgrainger bgrainger self-assigned this Aug 25, 2017
Copy link

@AdamDotNet AdamDotNet commented Aug 25, 2017

Awesome, thanks!

Copy link

@bgrainger bgrainger commented Aug 25, 2017

Shipped in 0.26.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

No branches or pull requests

2 participants