From 15009b9b560437d5d0ae17145c03be557ad5c5af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=BA=E8=83=BD=E5=A4=A7=E7=9F=B3=E5=A4=B4?= Date: Mon, 23 Jun 2025 17:06:13 +0800 Subject: [PATCH] =?UTF-8?q?netcore=E4=B8=8B=E6=94=AF=E6=8C=81MySqlConnecto?= =?UTF-8?q?r=E9=A9=B1=E5=8A=A8=EF=BC=9B=E4=B8=8B=E8=BD=BD=E7=AB=99?= =?UTF-8?q?=E5=90=AF=E7=94=A8/adonet=E5=AD=90=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Test/Program.cs | 2 -- Test/Test.csproj | 10 +++++----- XCode.MySql/XCode.MySql.csproj | 11 ++++------- XCode.Oracle/XCode.Oracle.csproj | 2 +- XCode.PostgreSQL/XCode.PostgreSQL.csproj | 2 +- XCode.SqlServer/XCode.SqlServer.csproj | 4 ++-- XCode/DataAccessLayer/Common/DbBase.cs | 14 ++++++++++++-- XCode/DataAccessLayer/Database/MySql.cs | 18 +++++++++++++++++- XCode/XCode.csproj | 2 +- XUnitTest.XCode/DataAccessLayer/MySqlTests.cs | 11 +++++++---- XUnitTest.XCode/XUnitTest.XCode.csproj | 10 +++++----- 11 files changed, 55 insertions(+), 31 deletions(-) diff --git a/Test/Program.cs b/Test/Program.cs index 9ad798c1e..a98e6838f 100644 --- a/Test/Program.cs +++ b/Test/Program.cs @@ -142,8 +142,6 @@ public class Program //}; //p.Insert(); - throw new Exception("error"); - var list = Role.FindAll(); XTrace.WriteLine("Roles: {0}", list.Count); diff --git a/Test/Test.csproj b/Test/Test.csproj index 166c3ebe7..255aa91c0 100644 --- a/Test/Test.csproj +++ b/Test/Test.csproj @@ -37,11 +37,11 @@ - - - - - + + + + + diff --git a/XCode.MySql/XCode.MySql.csproj b/XCode.MySql/XCode.MySql.csproj index a899552fa..fc1ef6b9e 100644 --- a/XCode.MySql/XCode.MySql.csproj +++ b/XCode.MySql/XCode.MySql.csproj @@ -1,6 +1,6 @@ - net452;net462;netstandard2.0;netstandard2.1 + net462;netstandard2.0;netstandard2.1 数据中间件MySql包 引入MySql数据库驱动包 新生命开发团队 @@ -35,13 +35,10 @@ \ - - - - - - + + + \ No newline at end of file diff --git a/XCode.Oracle/XCode.Oracle.csproj b/XCode.Oracle/XCode.Oracle.csproj index 975eb5747..48ce9b35a 100644 --- a/XCode.Oracle/XCode.Oracle.csproj +++ b/XCode.Oracle/XCode.Oracle.csproj @@ -36,7 +36,7 @@ - + diff --git a/XCode.PostgreSQL/XCode.PostgreSQL.csproj b/XCode.PostgreSQL/XCode.PostgreSQL.csproj index 541698650..9da620f8f 100644 --- a/XCode.PostgreSQL/XCode.PostgreSQL.csproj +++ b/XCode.PostgreSQL/XCode.PostgreSQL.csproj @@ -36,7 +36,7 @@ - + diff --git a/XCode.SqlServer/XCode.SqlServer.csproj b/XCode.SqlServer/XCode.SqlServer.csproj index a9950f780..b65185ab3 100644 --- a/XCode.SqlServer/XCode.SqlServer.csproj +++ b/XCode.SqlServer/XCode.SqlServer.csproj @@ -1,6 +1,6 @@ - net451;net461;netstandard2.0;netstandard2.1 + net462;netstandard2.0;netstandard2.1 数据中间件SqlServer包 引入SqlServer数据库驱动包 新生命开发团队 @@ -36,7 +36,7 @@ - + diff --git a/XCode/DataAccessLayer/Common/DbBase.cs b/XCode/DataAccessLayer/Common/DbBase.cs index bc4b9efb9..35ace1cf3 100755 --- a/XCode/DataAccessLayer/Common/DbBase.cs +++ b/XCode/DataAccessLayer/Common/DbBase.cs @@ -3,7 +3,6 @@ using System.Data; using System.Data.Common; using System.Runtime.InteropServices; using System.Text.RegularExpressions; -using NewLife; using NewLife.Collections; using NewLife.Log; using NewLife.Reflection; @@ -462,11 +461,22 @@ abstract class DbBase : DisposeBase, IDatabase /// 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(); + foreach (var item in urls) + { + if (!item.EndsWithIgnoreCase("/adonet", "/adonet/")) + urls2.Add(item.TrimEnd('/') + "/adonet"); + } + urls2.AddRange(urls); + try { if (name.IsNullOrEmpty()) name = Path.GetFileNameWithoutExtension(assemblyFile); 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); if (factory != null) return factory; diff --git a/XCode/DataAccessLayer/Database/MySql.cs b/XCode/DataAccessLayer/Database/MySql.cs index 9058288dd..f43f2bdd0 100755 --- a/XCode/DataAccessLayer/Database/MySql.cs +++ b/XCode/DataAccessLayer/Database/MySql.cs @@ -23,12 +23,21 @@ internal class MySql : RemoteDb var factory = GetProviderFactory(type); 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); factory = GetProviderFactory(type); if (factory != null) return factory; // 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"); } @@ -695,6 +704,13 @@ internal class MySqlMetaData : RemoteDbMetaData 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]); return dt != null && dt.Rows != null && dt.Rows.Count > 0; } diff --git a/XCode/XCode.csproj b/XCode/XCode.csproj index 2a7466999..ec6ad8521 100644 --- a/XCode/XCode.csproj +++ b/XCode/XCode.csproj @@ -46,7 +46,7 @@ - + diff --git a/XUnitTest.XCode/DataAccessLayer/MySqlTests.cs b/XUnitTest.XCode/DataAccessLayer/MySqlTests.cs index 8f085fb22..f28978822 100644 --- a/XUnitTest.XCode/DataAccessLayer/MySqlTests.cs +++ b/XUnitTest.XCode/DataAccessLayer/MySqlTests.cs @@ -83,9 +83,9 @@ public class MySqlTests using var conn = db.OpenConnection(); connstr = conn.ConnectionString; //Assert.EndsWith("characterset=utf8mb4;sslmode=Disabled;allowpublickeyretrieval=True", connstr); - Assert.Contains("characterset=utf8mb4", connstr); - Assert.Contains("sslmode=", connstr); - Assert.Contains("allowpublickeyretrieval=True", connstr); + Assert.Contains("=utf8mb4", connstr); + //Assert.Contains("sslmode=", connstr); + //Assert.Contains("allowpublickeyretrieval=True", connstr); var ver = db.ServerVersion; Assert.NotEmpty(ver); @@ -119,7 +119,10 @@ public class MySqlTests { 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;"); DAL.AddConnStr("MySql_Select", connStr, null, "MySql"); diff --git a/XUnitTest.XCode/XUnitTest.XCode.csproj b/XUnitTest.XCode/XUnitTest.XCode.csproj index 36cb26d6c..6666c18bb 100644 --- a/XUnitTest.XCode/XUnitTest.XCode.csproj +++ b/XUnitTest.XCode/XUnitTest.XCode.csproj @@ -84,13 +84,13 @@ - - - + + + - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive