diff --git a/FreeSql.sln b/FreeSql.sln index 6a97cec2..7cd4792c 100644 --- a/FreeSql.sln +++ b/FreeSql.sln @@ -107,6 +107,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.GBase", "P EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Tests.Provider.GBase", "FreeSql.Tests\FreeSql.Tests.Provider.GBase\FreeSql.Tests.Provider.GBase.csproj", "{B887C0DA-01BE-4537-ADC1-92545AC85684}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.Sqlite.Data", "Providers\FreeSql.Provider.Sqlite.Data\FreeSql.Provider.Sqlite.Data.csproj", "{5B4D16A3-7380-47E6-9247-560EB4DD36B0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.Sqlite.Data.Core", "Providers\FreeSql.Provider.Sqlite.Data.Core\FreeSql.Provider.Sqlite.Data.Core.csproj", "{21D41ACD-46B6-4716-B390-065725DD72DD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -621,6 +625,30 @@ Global {B887C0DA-01BE-4537-ADC1-92545AC85684}.Release|x64.Build.0 = Release|Any CPU {B887C0DA-01BE-4537-ADC1-92545AC85684}.Release|x86.ActiveCfg = Release|Any CPU {B887C0DA-01BE-4537-ADC1-92545AC85684}.Release|x86.Build.0 = Release|Any CPU + {5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Debug|x64.ActiveCfg = Debug|Any CPU + {5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Debug|x64.Build.0 = Debug|Any CPU + {5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Debug|x86.ActiveCfg = Debug|Any CPU + {5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Debug|x86.Build.0 = Debug|Any CPU + {5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Release|Any CPU.Build.0 = Release|Any CPU + {5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Release|x64.ActiveCfg = Release|Any CPU + {5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Release|x64.Build.0 = Release|Any CPU + {5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Release|x86.ActiveCfg = Release|Any CPU + {5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Release|x86.Build.0 = Release|Any CPU + {21D41ACD-46B6-4716-B390-065725DD72DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {21D41ACD-46B6-4716-B390-065725DD72DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {21D41ACD-46B6-4716-B390-065725DD72DD}.Debug|x64.ActiveCfg = Debug|Any CPU + {21D41ACD-46B6-4716-B390-065725DD72DD}.Debug|x64.Build.0 = Debug|Any CPU + {21D41ACD-46B6-4716-B390-065725DD72DD}.Debug|x86.ActiveCfg = Debug|Any CPU + {21D41ACD-46B6-4716-B390-065725DD72DD}.Debug|x86.Build.0 = Debug|Any CPU + {21D41ACD-46B6-4716-B390-065725DD72DD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {21D41ACD-46B6-4716-B390-065725DD72DD}.Release|Any CPU.Build.0 = Release|Any CPU + {21D41ACD-46B6-4716-B390-065725DD72DD}.Release|x64.ActiveCfg = Release|Any CPU + {21D41ACD-46B6-4716-B390-065725DD72DD}.Release|x64.Build.0 = Release|Any CPU + {21D41ACD-46B6-4716-B390-065725DD72DD}.Release|x86.ActiveCfg = Release|Any CPU + {21D41ACD-46B6-4716-B390-065725DD72DD}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -656,6 +684,8 @@ Global {0DBAA21C-39B2-4AAD-A43D-88E67ED239D1} = {2A381C57-2697-427B-9F10-55DA11FD02E4} {86C56235-5D37-4422-807B-B31681C7D01C} = {2A381C57-2697-427B-9F10-55DA11FD02E4} {BDE8EDC6-2646-45E0-A921-39CD1538A8C5} = {2A381C57-2697-427B-9F10-55DA11FD02E4} + {5B4D16A3-7380-47E6-9247-560EB4DD36B0} = {2A381C57-2697-427B-9F10-55DA11FD02E4} + {21D41ACD-46B6-4716-B390-065725DD72DD} = {2A381C57-2697-427B-9F10-55DA11FD02E4} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98} diff --git a/FreeSql/FreeSqlBuilder.cs b/FreeSql/FreeSqlBuilder.cs index 79b27190..f0b40d7c 100644 --- a/FreeSql/FreeSqlBuilder.cs +++ b/FreeSql/FreeSqlBuilder.cs @@ -201,6 +201,7 @@ namespace FreeSql break; case DataType.Sqlite: type = Type.GetType("FreeSql.Sqlite.SqliteProvider`1,FreeSql.Provider.Sqlite")?.MakeGenericType(typeof(TMark)); + if (type == null) type = Type.GetType("FreeSql.Sqlite.SqliteProvider`1,FreeSql.Provider.Sqlite.Data.Core")?.MakeGenericType(typeof(TMark)); //FreeSql.Provider.Sqlite.Data.dll if (type == null) throwNotFind("FreeSql.Provider.Sqlite.dll", "FreeSql.Sqlite.SqliteProvider<>"); break; diff --git a/Providers/FreeSql.Provider.Sqlite.Data.Core/FreeSql.Provider.Sqlite.Data.Core.csproj b/Providers/FreeSql.Provider.Sqlite.Data.Core/FreeSql.Provider.Sqlite.Data.Core.csproj new file mode 100644 index 00000000..38d7751b --- /dev/null +++ b/Providers/FreeSql.Provider.Sqlite.Data.Core/FreeSql.Provider.Sqlite.Data.Core.csproj @@ -0,0 +1,42 @@ + + + + netstandard2.0;net6.0 + 2.6.100 + true + FreeSql;ncc;YeXiangQin + FreeSql 数据库实现,基于 Microsoft.Data.Sqlite.Core、Sqlite 3.0,支持 .netstandard2.0、.net6.0 + https://github.com/2881099/FreeSql + https://github.com/2881099/FreeSql + git + MIT + FreeSql;ORM;sqlite + $(AssemblyName) + logo.png + $(AssemblyName) + true + true + true + key.snk + false + + + + + + + + + + + + + + + + + + + MicrosoftData + + \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Sqlite.Data.Core/key.snk b/Providers/FreeSql.Provider.Sqlite.Data.Core/key.snk new file mode 100644 index 00000000..53501ad1 Binary files /dev/null and b/Providers/FreeSql.Provider.Sqlite.Data.Core/key.snk differ diff --git a/Providers/FreeSql.Provider.Sqlite.Data/FreeSql.Provider.Sqlite.Data.csproj b/Providers/FreeSql.Provider.Sqlite.Data/FreeSql.Provider.Sqlite.Data.csproj new file mode 100644 index 00000000..88169359 --- /dev/null +++ b/Providers/FreeSql.Provider.Sqlite.Data/FreeSql.Provider.Sqlite.Data.csproj @@ -0,0 +1,39 @@ + + + + netstandard2.0; + 2.6.100 + true + FreeSql;ncc;YeXiangQin + FreeSql 数据库实现,基于Microsoft.Data.Sqlite、 Sqlite 3.0,支持 .netstandard2.0 + https://github.com/2881099/FreeSql + https://github.com/2881099/FreeSql + git + MIT + FreeSql;ORM;sqlite + $(AssemblyName) + logo.png + $(AssemblyName) + true + true + true + key.snk + false + + + + + + + + + + + + + + + + MicrosoftData + + \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Sqlite.Data/key.snk b/Providers/FreeSql.Provider.Sqlite.Data/key.snk new file mode 100644 index 00000000..ab35320e Binary files /dev/null and b/Providers/FreeSql.Provider.Sqlite.Data/key.snk differ diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs index a573432f..f3294901 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs @@ -5,7 +5,11 @@ using System; using System.Collections; using System.Data; using System.Data.Common; +#if MicrosoftData +using Microsoft.Data.Sqlite; +#else using System.Data.SQLite; +#endif using System.Text; using System.Threading; @@ -72,7 +76,12 @@ namespace FreeSql.Sqlite cmd.Connection = null; return cmd; } - return new SQLiteCommand(); +#if MicrosoftData + return new SqliteCommand(); +#else + return new SQLiteCommand(); +#endif + } public override void ReturnConnection(IObjectPool pool, Object conn, Exception ex) diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs index 2ed75b19..9185c56e 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs @@ -4,7 +4,11 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Data; using System.Data.Common; +#if MicrosoftData +using Microsoft.Data.Sqlite; +#else using System.Data.SQLite; +#endif using System.Linq; using System.Text; using System.Text.RegularExpressions; @@ -34,7 +38,11 @@ namespace FreeSql.Sqlite public void Return(Object obj, Exception exception, bool isRecreate = false) { +#if MicrosoftData + if (exception != null && exception is SqliteException) +#else if (exception != null && exception is SQLiteException) +#endif { try { if (obj.Value.Ping() == false) obj.Value.OpenAndAttach(policy.Attaches); } catch { base.SetUnavailable(exception); } } @@ -128,7 +136,11 @@ namespace FreeSql.Sqlite public DbConnection OnCreate() { +#if MicrosoftData + var conn = new SqliteConnection(_connectionString); +#else var conn = new SQLiteConnection(_connectionString); +#endif return conn; } diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs index adbe381a..9e6b572a 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs @@ -366,8 +366,21 @@ namespace FreeSql.Sqlite { case "Abs": return $"abs({getExp(exp.Arguments[0])})"; case "Sign": return $"sign({getExp(exp.Arguments[0])})"; +#if MicrosoftData + case "Floor": + { + var funExp = getExp(exp.Arguments[0]); + return $"cast({funExp} as int) - ({funExp} < cast({funExp} as int))"; + }; + case "Ceiling": + { + var funExp = getExp(exp.Arguments[0]); + return $"cast ({funExp} as int ) + ({funExp} > cast ({funExp} as int ))"; + }; +#else case "Floor": return $"floor({getExp(exp.Arguments[0])})"; case "Ceiling": return $"ceiling({getExp(exp.Arguments[0])})"; +#endif case "Round": if (exp.Arguments.Count > 1 && exp.Arguments[1].Type.FullName == "System.Int32") return $"round({getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})"; return $"round({getExp(exp.Arguments[0])})"; diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteUtils.cs b/Providers/FreeSql.Provider.Sqlite/SqliteUtils.cs index cf01e04e..522f841c 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteUtils.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteUtils.cs @@ -4,7 +4,11 @@ using System; using System.Collections.Generic; using System.Data; using System.Data.Common; +#if MicrosoftData +using Microsoft.Data.Sqlite; +#else using System.Data.SQLite; +#endif using System.Globalization; namespace FreeSql.Sqlite @@ -33,7 +37,11 @@ namespace FreeSql.Sqlite dbtype = DbType.Int64; break; } +#if MicrosoftData + var ret = new SqliteParameter(); +#else var ret = new SQLiteParameter(); +#endif ret.ParameterName = QuoteParamterName(parameterName); ret.DbType = dbtype; ret.Value = value; @@ -62,7 +70,11 @@ namespace FreeSql.Sqlite break; } } +#if MicrosoftData + var ret = new SqliteParameter(); +#else var ret = new SQLiteParameter(); +#endif ret.ParameterName = $"@{name}"; if (dbtype != null) ret.DbType = dbtype.Value; ret.Value = value;