mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +08:00
- 增加 Oracle CLOB/NCLOB 大文本类型读写支持;#259
This commit is contained in:
parent
cdfe48ac03
commit
7795296328
@ -110,6 +110,13 @@
|
||||
清空状态数据
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbSet`1.RemoveAsync(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})">
|
||||
<summary>
|
||||
根据 lambda 条件删除数据
|
||||
</summary>
|
||||
<param name="predicate"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbSet`1.Add(`0)">
|
||||
<summary>
|
||||
添加
|
||||
@ -204,6 +211,15 @@
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
|
||||
<summary>
|
||||
批量注入 Repository,可以参考代码自行调整
|
||||
</summary>
|
||||
<param name="services"></param>
|
||||
<param name="globalDataFilter"></param>
|
||||
<param name="assemblies"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IBaseRepository.AsType(System.Type)">
|
||||
<summary>
|
||||
动态Type,在使用 Repository<object> 后使用本方法,指定实体类型
|
||||
|
@ -1,5 +1,6 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using Newtonsoft.Json;
|
||||
using Oracle.ManagedDataAccess.Client;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -10,6 +11,53 @@ namespace FreeSql.Tests.Oracle
|
||||
{
|
||||
public class OracleCodeFirstTest
|
||||
{
|
||||
[Fact]
|
||||
public void Clob()
|
||||
{
|
||||
var str1 = string.Join(",", Enumerable.Range(0, 10000).Select(a => "我是中国人"));
|
||||
|
||||
var item1 = new TS_CLB01 { Data = str1 };
|
||||
Assert.Equal(1, g.oracle.Insert(item1).ExecuteAffrows());
|
||||
|
||||
var item2 = g.oracle.Select<TS_CLB01>().Where(a => a.Id == item1.Id).First();
|
||||
Assert.Equal(str1, item2.Data);
|
||||
|
||||
//NoneParameter
|
||||
item1 = new TS_CLB01 { Data = str1 };
|
||||
Assert.Throws<OracleException>(() => g.oracle.Insert(item1).NoneParameter().ExecuteAffrows());
|
||||
//Oracle.ManagedDataAccess.Client.OracleException:“ORA-01704: 字符串文字太长”
|
||||
}
|
||||
class TS_CLB01
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
[Column(DbType = "clob")]
|
||||
public string Data { get; set; }
|
||||
}
|
||||
[Fact]
|
||||
public void Blob()
|
||||
{
|
||||
var str1 = string.Join(",", Enumerable.Range(0, 10000).Select(a => "我是中国人"));
|
||||
var data1 = Encoding.UTF8.GetBytes(str1);
|
||||
|
||||
var item1 = new TS_BLB01 { Data = data1 };
|
||||
Assert.Equal(1, g.oracle.Insert(item1).ExecuteAffrows());
|
||||
|
||||
var item2 = g.oracle.Select<TS_BLB01>().Where(a => a.Id == item1.Id).First();
|
||||
Assert.Equal(item1.Data.Length, item2.Data.Length);
|
||||
|
||||
var str2 = Encoding.UTF8.GetString(item2.Data);
|
||||
Assert.Equal(str1, str2);
|
||||
|
||||
//NoneParameter
|
||||
item1 = new TS_BLB01 { Data = data1 };
|
||||
Assert.Throws<OracleException>(() => g.oracle.Insert(item1).NoneParameter().ExecuteAffrows());
|
||||
//Oracle.ManagedDataAccess.Client.OracleException:“ORA-01704: 字符串文字太长”
|
||||
}
|
||||
class TS_BLB01
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public byte[] Data { get; set; }
|
||||
}
|
||||
[Fact]
|
||||
public void StringLength()
|
||||
{
|
||||
|
@ -441,6 +441,12 @@ and not exists(select 1 from all_constraints where constraint_name = a.index_nam
|
||||
else if (sqlType.StartsWith("BLOB"))
|
||||
{
|
||||
}
|
||||
else if (sqlType.StartsWith("CLOB"))
|
||||
{
|
||||
}
|
||||
else if (sqlType.StartsWith("NCLOB"))
|
||||
{
|
||||
}
|
||||
else if (char_used.ToLower() == "c")
|
||||
sqlType += sqlType.StartsWith("N") ? $"({data_length / 2})" : $"({data_length / 4} CHAR)";
|
||||
else if (char_used.ToLower() == "b")
|
||||
|
@ -40,6 +40,10 @@ namespace FreeSql.Oracle
|
||||
if (col.DbPrecision != 0) ret.Precision = col.DbPrecision;
|
||||
if (col.DbScale != 0) ret.Scale = col.DbScale;
|
||||
break;
|
||||
case OracleDbType.Clob:
|
||||
case OracleDbType.NClob:
|
||||
ret = new OracleParameter { ParameterName = QuoteParamterName(parameterName), OracleDbType = dbtype2, Value = value };
|
||||
break;
|
||||
}
|
||||
}
|
||||
_params?.Add(ret);
|
||||
|
Loading…
x
Reference in New Issue
Block a user