Skip to content

Commit a6b5d69

Browse files
committed
Support DbProviderFactories.RegisterFactory. Fixes #526
1 parent 9d17166 commit a6b5d69

File tree

4 files changed

+74
-0
lines changed

4 files changed

+74
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
lastmod: 2019-03-06
3+
date: 2019-03-06
4+
menu:
5+
main:
6+
parent: getting started
7+
title: DbProviderFactories
8+
weight: 15
9+
---
10+
11+
Using DbProviderFactories
12+
==========
13+
14+
MySqlConnector can be registered with `DbProviderFactories` and obtained via `DbProviderFactories.GetFactory(MySqlClientFactory.InvariantName)`, or by
15+
using the methods [described here](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/obtaining-a-dbproviderfactory).
16+
17+
## .NET Framework
18+
19+
For .NET Framework applications, add the following section to your `app.config` or `web.config`:
20+
21+
```xml
22+
<system.data>
23+
<DbProviderFactories>
24+
<add name="MySqlConnector"
25+
invariant="MySqlConnector"
26+
description="Async MySQL ADO.NET Connector"
27+
type="MySql.Data.MySqlClient.MySqlClientFactory, MySqlConnector, Culture=neutral, PublicKeyToken=d33d3e53aa5f8c92" />
28+
</DbProviderFactories>
29+
</system.data>
30+
```
31+
32+
## .NET Core
33+
34+
For .NET Core 2.1 or later, call `MySqlClientFactory.Register()` during application startup. This will register MySqlConnector's
35+
`DbProviderFactory` implementation in the central `DbProviderFactories` registry.

src/MySqlConnector/MySql.Data.MySqlClient/MySqlClientFactory.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ namespace MySql.Data.MySqlClient
55
public sealed class MySqlClientFactory : DbProviderFactory
66
{
77
public static readonly MySqlClientFactory Instance = new MySqlClientFactory();
8+
public static readonly string InvariantName = "MySqlConnector";
89

910
public override DbCommand CreateCommand() => new MySqlCommand();
1011
public override DbConnection CreateConnection() => new MySqlConnection();
@@ -16,6 +17,10 @@ public sealed class MySqlClientFactory : DbProviderFactory
1617
public override DbDataAdapter CreateDataAdapter() => new MySqlDataAdapter();
1718
#endif
1819

20+
#if !NETSTANDARD1_3 && !NETSTANDARD2_0 && !NET45 && !NET461 && !NET471
21+
public static void Register() => DbProviderFactories.RegisterFactory(InvariantName, Instance);
22+
#endif
23+
1924
private MySqlClientFactory()
2025
{
2126
}

tests/SideBySide/ClientFactoryTests.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,30 @@ public void CreateDataAdapter()
4343
Assert.IsType<MySqlDataAdapter>(MySqlClientFactory.Instance.CreateDataAdapter());
4444
}
4545
#endif
46+
47+
#if !NETCOREAPP1_1_2 && !NETCOREAPP2_0
48+
[Fact]
49+
public void DbProviderFactories()
50+
{
51+
#if NETCOREAPP2_1
52+
MySqlClientFactory.Register();
53+
#endif
54+
#if BASELINE
55+
var providerInvariantName = "MySql.Data.MySqlClient";
56+
#else
57+
var providerInvariantName = MySqlClientFactory.InvariantName;
58+
#endif
59+
var factory = System.Data.Common.DbProviderFactories.GetFactory(providerInvariantName);
60+
Assert.NotNull(factory);
61+
Assert.Same(MySqlClientFactory.Instance, factory);
62+
63+
using (var connection = new MySqlConnection())
64+
{
65+
factory = System.Data.Common.DbProviderFactories.GetFactory(connection);
66+
Assert.NotNull(factory);
67+
Assert.Same(MySqlClientFactory.Instance, factory);
68+
}
69+
}
70+
#endif
4671
}
4772
}

tests/SideBySide/app.config

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<configuration>
3+
<system.data>
4+
<DbProviderFactories>
5+
<add name="MySqlConnector" invariant="MySqlConnector" description="Async MySQL ADO.NET Connector" type="MySql.Data.MySqlClient.MySqlClientFactory, MySqlConnector, Culture=neutral, PublicKeyToken=d33d3e53aa5f8c92" />
6+
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.10.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
7+
</DbProviderFactories>
8+
</system.data>
9+
</configuration>

0 commit comments

Comments
 (0)