From 558fc52cf09a74d6646bd0897479091a03bf7ec8 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Tue, 31 Mar 2020 06:07:47 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E8=B0=83=E6=95=B4=20Oracle=20StringLength/?= =?UTF-8?q?MaxLength=20-1=20=E6=97=B6=E5=80=99=E6=98=A0=E5=B0=84=E4=B8=BA?= =?UTF-8?q?=20nclob=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/FreeSql.DbContext.xml | 16 ------- .../Oracle/OracleCodeFirstTest.cs | 45 +++++++++++++++++++ FreeSql/Internal/UtilsExpressionTree.cs | 3 ++ 3 files changed, 48 insertions(+), 16 deletions(-) diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index ddd18378..28fdb213 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -110,13 +110,6 @@ 清空状态数据 - - - 根据 lambda 条件删除数据 - - - - 添加 @@ -211,15 +204,6 @@ - - - 批量注入 Repository,可以参考代码自行调整 - - - - - - 动态Type,在使用 Repository<object> 后使用本方法,指定实体类型 diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleCodeFirstTest.cs index 68b9de63..baf47d01 100644 --- a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleCodeFirstTest.cs @@ -11,6 +11,51 @@ namespace FreeSql.Tests.Oracle { public class OracleCodeFirstTest { + [Fact] + public void NClob_StringLength_1() + { + var str1 = string.Join(",", Enumerable.Range(0, 10000).Select(a => "й")); + + var item1 = new TS_NCLB02 { Data = str1 }; + Assert.Equal(1, g.oracle.Insert(item1).ExecuteAffrows()); + + var item2 = g.oracle.Select().Where(a => a.Id == item1.Id).First(); + Assert.Equal(str1, item2.Data); + + //NoneParameter + item1 = new TS_NCLB02 { Data = str1 }; + Assert.Throws(() => g.oracle.Insert(item1).NoneParameter().ExecuteAffrows()); + //Oracle.ManagedDataAccess.Client.OracleException:ORA-01704: ַ̫ + } + class TS_NCLB02 + { + public Guid Id { get; set; } + [Column(StringLength = - 1)] + public string Data { get; set; } + } + + [Fact] + public void NClob() + { + var str1 = string.Join(",", Enumerable.Range(0, 10000).Select(a => "й")); + + var item1 = new TS_NCLB01 { Data = str1 }; + Assert.Equal(1, g.oracle.Insert(item1).ExecuteAffrows()); + + var item2 = g.oracle.Select().Where(a => a.Id == item1.Id).First(); + Assert.Equal(str1, item2.Data); + + //NoneParameter + item1 = new TS_NCLB01 { Data = str1 }; + Assert.Throws(() => g.oracle.Insert(item1).NoneParameter().ExecuteAffrows()); + //Oracle.ManagedDataAccess.Client.OracleException:ORA-01704: ַ̫ + } + class TS_NCLB01 + { + public Guid Id { get; set; } + [Column(DbType = "nclob")] + public string Data { get; set; } + } [Fact] public void Clob() { diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index efdb4a8a..c77baea9 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -223,6 +223,9 @@ namespace FreeSql.Internal else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})"); break; case DataType.Oracle: + if (strlen < 0) colattr.DbType = "NCLOB"; //v1.3.2+ https://github.com/dotnetcore/FreeSql/issues/259 + else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})"); + break; case DataType.OdbcOracle: case DataType.OdbcDameng: if (strlen < 0) colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1(4000)");