netcore下支持MySqlConnector驱动;下载站启用/adonet子目录

This commit is contained in:
智能大石头 2025-06-23 17:06:13 +08:00
parent 2f1e163c6c
commit 15009b9b56
11 changed files with 55 additions and 31 deletions

View File

@ -142,8 +142,6 @@ public class Program
//}; //};
//p.Insert(); //p.Insert();
throw new Exception("error");
var list = Role.FindAll(); var list = Role.FindAll();
XTrace.WriteLine("Roles: {0}", list.Count); XTrace.WriteLine("Roles: {0}", list.Count);

View File

@ -37,11 +37,11 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="IBM.Data.DB2.Core" Version="3.1.0.600" /> <PackageReference Include="IBM.Data.DB2.Core" Version="3.1.0.600" />
<PackageReference Include="MySql.Data" Version="9.1.0" /> <PackageReference Include="MySqlConnector" Version="2.4.0" />
<PackageReference Include="NewLife.Redis" Version="6.2.2025.503" /> <PackageReference Include="NewLife.Redis" Version="6.2.2025.601" />
<PackageReference Include="NewLife.Remoting" Version="3.3.2025.501" /> <PackageReference Include="NewLife.Remoting" Version="3.3.2025.601" />
<PackageReference Include="NewLife.Stardust" Version="3.3.2025.506" /> <PackageReference Include="NewLife.Stardust" Version="3.4.2025.601" />
<PackageReference Include="Oracle.ManagedDataAccess.Core" Version="23.7.0" /> <PackageReference Include="Oracle.ManagedDataAccess.Core" Version="23.8.0" />
<PackageReference Include="SapHana.DotNetCore.Data.Provider" Version="2.11.14" /> <PackageReference Include="SapHana.DotNetCore.Data.Provider" Version="2.11.14" />
<PackageReference Include="System.Data.SqlClient" Version="4.9.0" /> <PackageReference Include="System.Data.SqlClient" Version="4.9.0" />
</ItemGroup> </ItemGroup>

View File

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current"> <Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net452;net462;netstandard2.0;netstandard2.1</TargetFrameworks> <TargetFrameworks>net462;netstandard2.0;netstandard2.1</TargetFrameworks>
<AssemblyTitle>数据中间件MySql包</AssemblyTitle> <AssemblyTitle>数据中间件MySql包</AssemblyTitle>
<Description>引入MySql数据库驱动包</Description> <Description>引入MySql数据库驱动包</Description>
<Company>新生命开发团队</Company> <Company>新生命开发团队</Company>
@ -35,13 +35,10 @@
<PackagePath>\</PackagePath> <PackagePath>\</PackagePath>
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'!='net452'">
<PackageReference Include="MySql.Data" Version="9.1.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'=='net452'">
<PackageReference Include="MySql.Data" Version="8.0.32.1" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\XCode\XCode.csproj" /> <ProjectReference Include="..\XCode\XCode.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="MySqlConnector" Version="2.4.0" />
</ItemGroup>
</Project> </Project>

View File

@ -36,7 +36,7 @@
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Oracle.ManagedDataAccess.Core" Version="23.7.0" /> <PackageReference Include="Oracle.ManagedDataAccess.Core" Version="23.8.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\XCode\XCode.csproj" /> <ProjectReference Include="..\XCode\XCode.csproj" />

View File

@ -36,7 +36,7 @@
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Npgsql" Version="8.0.6" /> <PackageReference Include="Npgsql" Version="8.0.7" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\XCode\XCode.csproj" /> <ProjectReference Include="..\XCode\XCode.csproj" />

View File

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current"> <Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net451;net461;netstandard2.0;netstandard2.1</TargetFrameworks> <TargetFrameworks>net462;netstandard2.0;netstandard2.1</TargetFrameworks>
<AssemblyTitle>数据中间件SqlServer包</AssemblyTitle> <AssemblyTitle>数据中间件SqlServer包</AssemblyTitle>
<Description>引入SqlServer数据库驱动包</Description> <Description>引入SqlServer数据库驱动包</Description>
<Company>新生命开发团队</Company> <Company>新生命开发团队</Company>
@ -36,7 +36,7 @@
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="System.Data.SqlClient" Version="4.8.6" /> <PackageReference Include="System.Data.SqlClient" Version="4.9.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\XCode\XCode.csproj" /> <ProjectReference Include="..\XCode\XCode.csproj" />

View File

@ -3,7 +3,6 @@ using System.Data;
using System.Data.Common; using System.Data.Common;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using NewLife;
using NewLife.Collections; using NewLife.Collections;
using NewLife.Log; using NewLife.Log;
using NewLife.Reflection; using NewLife.Reflection;
@ -462,11 +461,22 @@ abstract class DbBase : DisposeBase, IDatabase
/// <returns></returns> /// <returns></returns>
public static DbProviderFactory? GetProviderFactory(String? name, String assemblyFile, String className, Boolean strict = false, Boolean ignoreError = false) public static DbProviderFactory? GetProviderFactory(String? name, String assemblyFile, String className, Boolean strict = false, Boolean ignoreError = false)
{ {
// 支持adonet新的下载路径
var set = NewLife.Setting.Current;
var urls = set.PluginServer.Split([',', ';']).ToList();
var urls2 = new List<String>();
foreach (var item in urls)
{
if (!item.EndsWithIgnoreCase("/adonet", "/adonet/"))
urls2.Add(item.TrimEnd('/') + "/adonet");
}
urls2.AddRange(urls);
try try
{ {
if (name.IsNullOrEmpty()) name = Path.GetFileNameWithoutExtension(assemblyFile); if (name.IsNullOrEmpty()) name = Path.GetFileNameWithoutExtension(assemblyFile);
var links = GetLinkNames(name, strict); var links = GetLinkNames(name, strict);
var type = PluginHelper.LoadPlugin(className, null, assemblyFile, links.Join(",")); var type = PluginHelper.LoadPlugin(className, null, assemblyFile, links.Join(","), urls2.Join(";"));
var factory = GetProviderFactory(type); var factory = GetProviderFactory(type);
if (factory != null) return factory; if (factory != null) return factory;

View File

@ -23,12 +23,21 @@ internal class MySql : RemoteDb
var factory = GetProviderFactory(type); var factory = GetProviderFactory(type);
if (factory != null) return factory; if (factory != null) return factory;
#if NETSTANDARD
type = PluginHelper.LoadPlugin("MySqlConnector.MySqlConnectorFactory", null, "MySqlConnector.dll", null);
factory = GetProviderFactory(type);
if (factory != null) return factory;
#endif
type = PluginHelper.LoadPlugin("MySql.Data.MySqlClient.MySqlClientFactory", null, "MySql.Data.dll", null); type = PluginHelper.LoadPlugin("MySql.Data.MySqlClient.MySqlClientFactory", null, "MySql.Data.dll", null);
factory = GetProviderFactory(type); factory = GetProviderFactory(type);
if (factory != null) return factory; if (factory != null) return factory;
// MewLife.MySql 在开发过程中,数据驱动下载站点没有它的包,暂时不支持下载 // MewLife.MySql 在开发过程中,数据驱动下载站点没有它的包,暂时不支持下载
return GetProviderFactory("NewLife.MySql", "NewLife.MySql.dll", "NewLife.MySql.MySqlClientFactory", true, true) ?? return GetProviderFactory(null, "NewLife.MySql.dll", "NewLife.MySql.MySqlClientFactory", true, true) ??
#if NETSTANDARD
GetProviderFactory(null, "MySqlConnector.dll", "MySqlConnector.MySqlConnectorFactory", true, true) ??
#endif
GetProviderFactory(null, "MySql.Data.dll", "MySql.Data.MySqlClient.MySqlClientFactory"); GetProviderFactory(null, "MySql.Data.dll", "MySql.Data.MySqlClient.MySqlClientFactory");
} }
@ -695,6 +704,13 @@ internal class MySqlMetaData : RemoteDbMetaData
protected override Boolean DatabaseExist(String databaseName) protected override Boolean DatabaseExist(String databaseName)
{ {
// MySqlConnector 不支持获取单个数据库架构,需要整体获取后再过滤
if (Database.Factory.GetType().Name.Contains("MySqlConnector"))
{
var dbs = GetSchema(_.Databases, null);
return dbs != null && dbs.Select($"schema_name='{databaseName}'").Length > 0;
}
var dt = GetSchema(_.Databases, [databaseName]); var dt = GetSchema(_.Databases, [databaseName]);
return dt != null && dt.Rows != null && dt.Rows.Count > 0; return dt != null && dt.Rows != null && dt.Rows.Count > 0;
} }

View File

@ -46,7 +46,7 @@
</PackageReference> </PackageReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="NewLife.Core" Version="11.5.2025.601" /> <PackageReference Include="NewLife.Core" Version="11.5.2025.623-beta0617" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Using Include="NewLife" /> <Using Include="NewLife" />

View File

@ -83,9 +83,9 @@ public class MySqlTests
using var conn = db.OpenConnection(); using var conn = db.OpenConnection();
connstr = conn.ConnectionString; connstr = conn.ConnectionString;
//Assert.EndsWith("characterset=utf8mb4;sslmode=Disabled;allowpublickeyretrieval=True", connstr); //Assert.EndsWith("characterset=utf8mb4;sslmode=Disabled;allowpublickeyretrieval=True", connstr);
Assert.Contains("characterset=utf8mb4", connstr); Assert.Contains("=utf8mb4", connstr);
Assert.Contains("sslmode=", connstr); //Assert.Contains("sslmode=", connstr);
Assert.Contains("allowpublickeyretrieval=True", connstr); //Assert.Contains("allowpublickeyretrieval=True", connstr);
var ver = db.ServerVersion; var ver = db.ServerVersion;
Assert.NotEmpty(ver); Assert.NotEmpty(ver);
@ -119,7 +119,10 @@ public class MySqlTests
{ {
dal.Execute("drop database membership_test"); dal.Execute("drop database membership_test");
} }
catch (Exception ex) { XTrace.WriteException(ex); } catch (Exception ex)
{
XTrace.WriteLine(ex.Message);
}
var connStr = _ConnStr.Replace("Database=sys;", "Database=Membership_Test;"); var connStr = _ConnStr.Replace("Database=sys;", "Database=Membership_Test;");
DAL.AddConnStr("MySql_Select", connStr, null, "MySql"); DAL.AddConnStr("MySql_Select", connStr, null, "MySql");

View File

@ -84,13 +84,13 @@
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageReference Include="NewLife.Core" Version="11.5.2025.601" /> <PackageReference Include="NewLife.Core" Version="11.5.2025.623-beta0617" />
<PackageReference Include="NewLife.IP" Version="2.3.2025.202" /> <PackageReference Include="NewLife.IP" Version="2.3.2025.601" />
<PackageReference Include="NewLife.UnitTest" Version="1.0.2025.101" /> <PackageReference Include="NewLife.UnitTest" Version="1.0.2025.101" />
<PackageReference Include="System.Diagnostics.PerformanceCounter" Version="9.0.0" /> <PackageReference Include="System.Diagnostics.PerformanceCounter" Version="9.0.6" />
<PackageReference Include="xunit" Version="2.9.3" /> <PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.0"> <PackageReference Include="xunit.runner.visualstudio" Version="3.1.1">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>