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)");