From dee1d9af8b5784485fb0c9066a0f480e857b8f3b Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Sun, 8 Dec 2019 13:04:29 +0800 Subject: [PATCH] =?UTF-8?q?##=20v0.12.11=20=E8=B0=83=E6=95=B4=20ContainsMa?= =?UTF-8?q?ny=20=E6=96=B9=E6=B3=95=E5=90=8D=E4=B8=BA=20Contains?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.xml | 7 - FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql.Tests/FreeSql.Tests/UnitTest2.cs | 27 +++- .../Extensions/FreeSqlGlobalExpressionCall.cs | 130 ++++++++++++++++++ FreeSql/Extensions/FreeSqlGlobalExtensions.cs | 120 ---------------- FreeSql/FreeSql.csproj | 2 +- FreeSql/FreeSql.xml | 110 +++++++-------- .../FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- .../FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- .../FreeSql.Provider.Sqlite.csproj | 2 +- 18 files changed, 222 insertions(+), 198 deletions(-) create mode 100644 FreeSql/Extensions/FreeSqlGlobalExpressionCall.cs diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index 6164c448..75cfd098 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.12.10 + 0.12.11 true YeXiangQin BaseEntity 是一种极简单的 CodeFirst 开发方式,特别对单表或多表CRUD,利用继承节省了每个实体类的重复属性(创建时间、ID等字段),软件删除等功能,进行 crud 操作时不必时常考虑仓储的使用. diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index 97d35e10..93c33975 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -2,7 +2,7 @@ netstandard2.0;net45;net40 - 0.12.10 + 0.12.11 true YeXiangQin FreeSql 扩展包,可实现实体类属性为对象时,以JSON形式映射存储. diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index e0d0a18a..0a287d13 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -2,7 +2,7 @@ netstandard2.0;net45;net40 - 0.12.10 + 0.12.11 true YeXiangQin FreeSql 扩展包,可实现【延时加载】属性. diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index 65e471f8..6557cd4e 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -2,7 +2,7 @@ netstandard2.0;net45;net40 - 0.12.10 + 0.12.11 true YeXiangQin FreeSql is the most convenient ORM in .NetCore, .NetFramework, And Xamarin. It supports Mysql, Postgresql, SqlServer, Oracle, Sqlite, And Odbc. diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index d9f91124..dc0203b8 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -110,13 +110,6 @@ 清空状态数据 - - - 根据 lambda 条件删除数据 - - - - 添加 diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 67626392..0e8c0d0e 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -2,7 +2,7 @@ netstandard2.0;net45;net40 - 0.12.10 + 0.12.11 YeXiangQin FreeSql Implementation of General Repository, Support MySql/SqlServer/PostgreSQL/Oracle/Sqlite, and read/write separation、and split table. https://github.com/2881099/FreeSql/wiki/Repository diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs index b8def659..f65fd232 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs @@ -264,13 +264,34 @@ namespace FreeSql.Tests }); List<(Guid, DateTime)> contains2linqarr = new List<(Guid, DateTime)>(); - Assert.Equal("SELECT 1 as1 FROM \"TestIgnoreDefaultValue\" a WHERE (1=0)", g.sqlite.Select().Where(a => contains2linqarr.ContainsMany(a.Id, a.ct1)).ToSql(a => 1).Replace("\r\n", "")); - g.sqlite.Select().Where(a => contains2linqarr.ContainsMany(a.Id, a.ct1)).ToList(); + Assert.Equal("SELECT 1 as1 FROM \"TestIgnoreDefaultValue\" a WHERE (1=0)", g.sqlite.Select().Where(a => contains2linqarr.Contains(a.Id, a.ct1)).ToSql(a => 1).Replace("\r\n", "")); + g.sqlite.Select().Where(a => contains2linqarr.Contains(a.Id, a.ct1)).ToList(); contains2linqarr.Add((Guid.NewGuid(), DateTime.Now)); contains2linqarr.Add((Guid.NewGuid(), DateTime.Now)); contains2linqarr.Add((Guid.NewGuid(), DateTime.Now)); - g.sqlite.Select().Where(a => contains2linqarr.ContainsMany(a.Id, a.ct1)).ToList(); + g.sqlite.Select() + .Where(a => contains2linqarr.Contains(a.Id, a.ct1)).ToList(); + + + + + + + + + + + + + List<(Guid, DateTime, DateTime?)> contains3linqarr = new List<(Guid, DateTime, DateTime?)>(); + Assert.Equal("SELECT 1 as1 FROM \"TestIgnoreDefaultValue\" a WHERE (1=0)", g.sqlite.Select().Where(a => contains3linqarr.Contains(a.Id, a.ct1, a.ct2)).ToSql(a => 1).Replace("\r\n", "")); + g.sqlite.Select().Where(a => contains3linqarr.Contains(a.Id, a.ct1, a.ct2)).ToList(); + + contains3linqarr.Add((Guid.NewGuid(), DateTime.Now, DateTime.Now)); + contains3linqarr.Add((Guid.NewGuid(), DateTime.Now, DateTime.Now)); + contains3linqarr.Add((Guid.NewGuid(), DateTime.Now, DateTime.Now)); + g.sqlite.Select().Where(a => contains3linqarr.Contains(a.Id, a.ct1, a.ct2)).ToList(); var start = DateTime.Now.Date; var end = DateTime.Now.AddDays(1).Date.AddMilliseconds(-1); diff --git a/FreeSql/Extensions/FreeSqlGlobalExpressionCall.cs b/FreeSql/Extensions/FreeSqlGlobalExpressionCall.cs new file mode 100644 index 00000000..83b7e83e --- /dev/null +++ b/FreeSql/Extensions/FreeSqlGlobalExpressionCall.cs @@ -0,0 +1,130 @@ +using FreeSql; +using FreeSql.DataAnnotations; +using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using System.Text; +using System.Threading; + +[ExpressionCall] +public static class FreeSqlGlobalExpressionCall +{ + public static ThreadLocal expContext = new ThreadLocal(); + + /// + /// C#: that >= between && that <= and + /// SQL: that BETWEEN between AND and + /// + /// + /// + /// + /// + public static bool Between(this DateTime that, DateTime between, DateTime and) + { + if (expContext.IsValueCreated == false || expContext.Value == null || expContext.Value.ParsedContent == null) + return that >= between && that <= and; + expContext.Value.Result = $"{expContext.Value.ParsedContent["that"]} between {expContext.Value.ParsedContent["between"]} and {expContext.Value.ParsedContent["and"]}"; + return false; + } + + /// + /// 注意:这个方法和 Between 有细微区别 + /// C#: that >= start && that < end + /// SQL: that >= start and that < end + /// + /// + /// + /// + /// + public static bool BetweenEnd(this DateTime that, DateTime start, DateTime end) + { + if (expContext.IsValueCreated == false || expContext.Value == null || expContext.Value.ParsedContent == null) + return that >= start && that < end; + expContext.Value.Result = $"{expContext.Value.ParsedContent["that"]} >= {expContext.Value.ParsedContent["start"]} and {expContext.Value.ParsedContent["that"]} < {expContext.Value.ParsedContent["end"]}"; + return false; + } + + /// + /// C#:从元组集合中查找 exp1, exp2 是否存在 + /// SQL: + /// exp1 = that[0].Item1 and exp2 = that[0].Item2 OR + /// exp1 = that[1].Item1 and exp2 = that[1].Item2 OR + /// ... + /// 注意:当 that 为 null 或 empty 时,返回 1=0 + /// + /// + /// + /// + /// + /// + /// + public static bool Contains([RawValue] this IEnumerable<(T1, T2)> that, T1 exp1, T2 exp2) + { + if (expContext.IsValueCreated == false || expContext.Value == null || expContext.Value.ParsedContent == null) + return that?.Any(a => a.Item1.Equals(exp1) && a.Item2.Equals(exp2)) == true; + if (that?.Any() != true) + { + expContext.Value.Result = "1=0"; + return false; + } + var sb = new StringBuilder(); + var idx = 0; + foreach (var item in that) + { + if (idx++ > 0) sb.Append(" OR \r\n"); + sb + .Append(expContext.Value.ParsedContent["exp1"]).Append(" = ").Append(expContext.Value.FormatSql(FreeSql.Internal.Utils.GetDataReaderValue(typeof(T1), item.Item1))) + .Append(" AND ") + .Append(expContext.Value.ParsedContent["exp2"]).Append(" = ").Append(expContext.Value.FormatSql(FreeSql.Internal.Utils.GetDataReaderValue(typeof(T2), item.Item2))); + } + expContext.Value.Result = sb.ToString(); + return true; + } + /// + /// C#:从元组集合中查找 exp1, exp2, exp2 是否存在 + /// SQL: + /// exp1 = that[0].Item1 and exp2 = that[0].Item2 and exp3 = that[0].Item3 OR + /// exp1 = that[1].Item1 and exp2 = that[1].Item2 and exp3 = that[1].Item3 OR + /// ... + /// 注意:当 that 为 null 或 empty 时,返回 1=0 + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static bool Contains([RawValue] this IEnumerable<(T1, T2, T3)> that, T1 exp1, T2 exp2, T3 exp3) + { + if (expContext.IsValueCreated == false || expContext.Value == null || expContext.Value.ParsedContent == null) + return that.Any(a => a.Item1.Equals(exp1) && a.Item2.Equals(exp2) && a.Item3.Equals(exp3)); + if (that.Any() == false) + { + expContext.Value.Result = "1=0"; + return false; + } + var sb = new StringBuilder(); + var idx = 0; + foreach (var item in that) + { + if (idx++ > 0) sb.Append(" OR \r\n"); + sb + .Append(expContext.Value.ParsedContent["exp1"]).Append(" = ").Append(expContext.Value.FormatSql(FreeSql.Internal.Utils.GetDataReaderValue(typeof(T1), item.Item1))) + .Append(" AND ") + .Append(expContext.Value.ParsedContent["exp2"]).Append(" = ").Append(expContext.Value.FormatSql(FreeSql.Internal.Utils.GetDataReaderValue(typeof(T2), item.Item2))) + .Append(" AND ") + .Append(expContext.Value.ParsedContent["exp3"]).Append(" = ").Append(expContext.Value.FormatSql(FreeSql.Internal.Utils.GetDataReaderValue(typeof(T3), item.Item3))); + } + expContext.Value.Result = sb.ToString(); + return true; + } +} \ No newline at end of file diff --git a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs index 80e588fd..86449244 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs @@ -222,124 +222,4 @@ public static partial class FreeSqlGlobalExtensions } #endif #endregion - - #region LambdaExpression - - public static ThreadLocal expContext = new ThreadLocal(); - - /// - /// C#: that >= between && that <= and - /// SQL: that BETWEEN between AND and - /// - /// - /// - /// - /// - [ExpressionCall] - public static bool Between(this DateTime that, DateTime between, DateTime and) - { - if (expContext.IsValueCreated == false || expContext.Value == null || expContext.Value.ParsedContent == null) - return that >= between && that <= and; - expContext.Value.Result = $"{expContext.Value.ParsedContent["that"]} between {expContext.Value.ParsedContent["between"]} and {expContext.Value.ParsedContent["and"]}"; - return false; - } - - /// - /// 注意:这个方法和 Between 有细微区别 - /// C#: that >= start && that < end - /// SQL: that >= start and that < end - /// - /// - /// - /// - /// - [ExpressionCall] - public static bool BetweenEnd(this DateTime that, DateTime start, DateTime end) - { - if (expContext.IsValueCreated == false || expContext.Value == null || expContext.Value.ParsedContent == null) - return that >= start && that < end; - expContext.Value.Result = $"{expContext.Value.ParsedContent["that"]} >= {expContext.Value.ParsedContent["start"]} and {expContext.Value.ParsedContent["that"]} < {expContext.Value.ParsedContent["end"]}"; - return false; - } - - /// - /// C#:从元组集合中查找 exp1, exp2 是否存在 - /// SQL: - /// exp1 = that[0].Item1 and exp2 = that[0].Item2 OR - /// exp1 = that[1].Item1 and exp2 = that[1].Item2 OR - /// ... - /// 注意:当 that 为 null 或 empty 时,返回 1=0 - /// - /// - /// - /// - /// - /// - /// - [ExpressionCall] - public static bool ContainsMany([RawValue] this IEnumerable<(T1, T2)> that, T1 exp1, T2 exp2) - { - if (expContext.IsValueCreated == false || expContext.Value == null || expContext.Value.ParsedContent == null) - return that?.Any(a => a.Item1.Equals(exp1) && a.Item2.Equals(exp2)) == true; - if (that?.Any() != true) - { - expContext.Value.Result = "1=0"; - return false; - } - var sb = new StringBuilder(); - var idx = 0; - foreach (var item in that) - { - if (idx++ > 0) sb.Append(" OR \r\n"); - sb - .Append(expContext.Value.ParsedContent["exp1"]).Append(" = ").Append(expContext.Value.FormatSql(FreeSql.Internal.Utils.GetDataReaderValue(typeof(T1), item.Item1))) - .Append(" AND ") - .Append(expContext.Value.ParsedContent["exp2"]).Append(" = ").Append(expContext.Value.FormatSql(FreeSql.Internal.Utils.GetDataReaderValue(typeof(T2), item.Item2))); - } - expContext.Value.Result = sb.ToString(); - return true; - } - /// - /// C#:从元组集合中查找 exp1, exp2 是否存在 - /// SQL: - /// exp1 = that[0].Item1 and exp2 = that[0].Item2 and exp3 = that[0].Item3 OR - /// exp1 = that[1].Item1 and exp2 = that[1].Item2 and exp3 = that[1].Item3 OR - /// ... - /// 注意:当 that 为 null 或 empty 时,返回 1=0 - /// - /// - /// - /// - /// - /// - /// - /// - /// - [ExpressionCall] - public static bool ContainsMany([RawValue] this IEnumerable<(T1, T2, T3)> that, T1 exp1, T2 exp2, T3 exp3) - { - if (expContext.IsValueCreated == false || expContext.Value == null || expContext.Value.ParsedContent == null) - return that.Any(a => a.Item1.Equals(exp1) && a.Item2.Equals(exp2) && a.Item3.Equals(exp3)); - if (that.Any() == false) - { - expContext.Value.Result = "1=0"; - return false; - } - var sb = new StringBuilder(); - var idx = 0; - foreach (var item in that) - { - if (idx++ > 0) sb.Append(" OR \r\n"); - sb - .Append(expContext.Value.ParsedContent["exp1"]).Append(" = ").Append(expContext.Value.FormatSql(FreeSql.Internal.Utils.GetDataReaderValue(typeof(T1), item.Item1))) - .Append(" AND ") - .Append(expContext.Value.ParsedContent["exp2"]).Append(" = ").Append(expContext.Value.FormatSql(FreeSql.Internal.Utils.GetDataReaderValue(typeof(T2), item.Item2))) - .Append(" AND ") - .Append(expContext.Value.ParsedContent["exp3"]).Append(" = ").Append(expContext.Value.FormatSql(FreeSql.Internal.Utils.GetDataReaderValue(typeof(T3), item.Item3))); - } - expContext.Value.Result = sb.ToString(); - return true; - } - - #endregion } \ No newline at end of file diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 1e75df79..9e93c88b 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -2,7 +2,7 @@ netstandard2.0;net45;net40 - 0.12.10 + 0.12.11 true YeXiangQin FreeSql is the most convenient ORM in .NetCore, .NetFramework, And Xamarin. It supports Mysql, Postgresql, SqlServer, Oracle, Sqlite, And Odbc. diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index cda36dcd..8a2c7fc9 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -2688,6 +2688,61 @@ + + + C#: that >= between && that <= and + SQL: that BETWEEN between AND and + + + + + + + + + 注意:这个方法和 Between 有细微区别 + C#: that >= start && that < end + SQL: that >= start and that < end + + + + + + + + + C#:从元组集合中查找 exp1, exp2 是否存在 + SQL: + exp1 = that[0].Item1 and exp2 = that[0].Item2 OR + exp1 = that[1].Item1 and exp2 = that[1].Item2 OR + ... + 注意:当 that 为 null 或 empty 时,返回 1=0 + + + + + + + + + + + C#:从元组集合中查找 exp1, exp2, exp2 是否存在 + SQL: + exp1 = that[0].Item1 and exp2 = that[0].Item2 and exp3 = that[0].Item3 OR + exp1 = that[1].Item1 and exp2 = that[1].Item2 and exp3 = that[1].Item3 OR + ... + 注意:当 that 为 null 或 empty 时,返回 1=0 + + + + + + + + + + 测量两个经纬度的距离,返回单位:米 @@ -2773,61 +2828,6 @@ 即能 ThenInclude,还可以二次过滤(这个 EFCore 做不到?) - - - C#: that >= between && that <= and - SQL: that BETWEEN between AND and - - - - - - - - - 注意:这个方法和 Between 有细微区别 - C#: that >= start && that < end - SQL: that >= start and that < end - - - - - - - - - C#:从元组集合中查找 exp1, exp2 是否存在 - SQL: - exp1 = that[0].Item1 and exp2 = that[0].Item2 OR - exp1 = that[1].Item1 and exp2 = that[1].Item2 OR - ... - 注意:当 that 为 null 或 empty 时,返回 1=0 - - - - - - - - - - - C#:从元组集合中查找 exp1, exp2 是否存在 - SQL: - exp1 = that[0].Item1 and exp2 = that[0].Item2 and exp3 = that[0].Item3 OR - exp1 = that[1].Item1 and exp2 = that[1].Item2 and exp3 = that[1].Item3 OR - ... - 注意:当 that 为 null 或 empty 时,返回 1=0 - - - - - - - - - - 使用 and 拼接两个 lambda 表达式 diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index 974ee953..56319a44 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -2,7 +2,7 @@ netstandard2.0;net452;net451;net45;net40 - 0.12.10 + 0.12.11 true YeXiangQin FreeSql 数据库实现,基于 MySql 5.6 diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index a04311ff..f84adda1 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -2,7 +2,7 @@ netstandard2.0;net45 - 0.12.10 + 0.12.11 true YeXiangQin FreeSql 数据库实现,基于 MySql 5.6 diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index 628de893..00772c40 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -2,7 +2,7 @@ netstandard2.0;net45;net40 - 0.12.10 + 0.12.11 true YeXiangQin FreeSql 数据库 Odbc 实现,基于 {Oracle}、{SQL Server}、{MySQL ODBC 8.0 Unicode Driver}、{PostgreSQL Unicode(x64)} 专用访问实现,以及通用 Odbc 访问所有数据库 diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 2d98a41f..d15e9462 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -2,7 +2,7 @@ netstandard2.0;net45;net40 - 0.12.10 + 0.12.11 true YeXiangQin FreeSql 数据库实现,基于 Oracle 11 diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index bbf55050..f851f2c6 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -2,7 +2,7 @@ netstandard2.0;net461;net452;net451;net45 - 0.12.10 + 0.12.11 true YeXiangQin FreeSql 数据库实现,基于 PostgreSQL 9.5 diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index bd99abff..8271e6d4 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -2,7 +2,7 @@ netstandard2.0;net451;net45;net40 - 0.12.10 + 0.12.11 true YeXiangQin FreeSql 数据库实现,基于 SqlServer 2005+,并根据版本适配分页方法:row_number 或 offset fetch next diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 0f912a42..c3e4878c 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -2,7 +2,7 @@ netstandard2.0;net45;net40 - 0.12.10 + 0.12.11 true YeXiangQin FreeSql 数据库实现,基于 Sqlite 3.0,支持 .NetCore、.NetFramework、Xamarin