Skip to content

Commit 73eb3c8

Browse files
2881028810
authored andcommitted
- 增加 StringLength/MaxLength 对 byte[] 的支持;
1 parent 4ddf4c0 commit 73eb3c8

File tree

12 files changed

+239
-4
lines changed

12 files changed

+239
-4
lines changed

Examples/base_entity/Program.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,26 @@ static void Main(string[] args)
149149

150150
var repo = BaseEntity.Orm.Select<TestConfig>().Limit(10).ToList();
151151

152+
153+
//void ConfigEntityProperty(object sender, FreeSql.Aop.ConfigEntityPropertyEventArgs e)
154+
//{
155+
// if (e.Property.PropertyType == typeof(byte[]))
156+
// {
157+
// var orm = sender as IFreeSql;
158+
// switch (orm.Ado.DataType)
159+
// {
160+
// case DataType.SqlServer:
161+
// e.ModifyResult.DbType = "image";
162+
// break;
163+
// case DataType.MySql:
164+
// e.ModifyResult.DbType = "longblob";
165+
// break;
166+
// }
167+
// }
168+
//}
169+
//fsql.Aop.ConfigEntityProperty += ConfigEntityProperty;
170+
171+
152172
Task.Run(async () =>
153173
{
154174
using (var uow = BaseEntity.Orm.CreateUnitOfWork())

FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlCodeFirstTest.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Newtonsoft.Json;
33
using System;
44
using System.Collections.Generic;
5+
using System.ComponentModel.DataAnnotations;
56
using System.Linq;
67
using System.Text;
78
using Xunit;
@@ -98,6 +99,38 @@ class TS_TEXT03
9899
public string Data { get; set; }
99100
}
100101

102+
[Fact]
103+
public void Blob()
104+
{
105+
var str1 = string.Join(",", Enumerable.Range(0, 10000).Select(a => "我是中国人"));
106+
var data1 = Encoding.UTF8.GetBytes(str1);
107+
108+
var item1 = new TS_BLB01 { Data = data1 };
109+
Assert.Equal(1, g.mysql.Insert(item1).ExecuteAffrows());
110+
111+
var item2 = g.mysql.Select<TS_BLB01>().Where(a => a.Id == item1.Id).First();
112+
Assert.Equal(item1.Data.Length, item2.Data.Length);
113+
114+
var str2 = Encoding.UTF8.GetString(item2.Data);
115+
Assert.Equal(str1, str2);
116+
117+
//NoneParameter
118+
item1 = new TS_BLB01 { Data = data1 };
119+
Assert.Equal(1, g.mysql.Insert<TS_BLB01>().NoneParameter().AppendData(item1).ExecuteAffrows());
120+
121+
item2 = g.mysql.Select<TS_BLB01>().Where(a => a.Id == item1.Id).First();
122+
Assert.Equal(item1.Data.Length, item2.Data.Length);
123+
124+
str2 = Encoding.UTF8.GetString(item2.Data);
125+
Assert.Equal(str1, str2);
126+
}
127+
class TS_BLB01
128+
{
129+
public Guid Id { get; set; }
130+
[MaxLength(-2)]
131+
public byte[] Data { get; set; }
132+
}
133+
101134
[Fact]
102135
public void StringLength()
103136
{

FreeSql.Tests/FreeSql.Tests/Dameng/DamengCodeFirstTest.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Newtonsoft.Json;
33
using System;
44
using System.Collections.Generic;
5+
using System.ComponentModel.DataAnnotations;
56
using System.Linq;
67
using System.Text;
78
using Xunit;
@@ -76,6 +77,7 @@ public void Blob()
7677
class TS_BLB01
7778
{
7879
public Guid Id { get; set; }
80+
[MaxLength(-1)]
7981
public byte[] Data { get; set; }
8082
}
8183
[Fact]

FreeSql.Tests/FreeSql.Tests/MySql/MySqlCodeFirstTest.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Newtonsoft.Json;
33
using System;
44
using System.Collections.Generic;
5+
using System.ComponentModel.DataAnnotations;
56
using System.Linq;
67
using System.Text;
78
using Xunit;
@@ -98,6 +99,38 @@ class TS_TEXT03
9899
public string Data { get; set; }
99100
}
100101

102+
[Fact]
103+
public void Blob()
104+
{
105+
var str1 = string.Join(",", Enumerable.Range(0, 10000).Select(a => "我是中国人"));
106+
var data1 = Encoding.UTF8.GetBytes(str1);
107+
108+
var item1 = new TS_BLB01 { Data = data1 };
109+
Assert.Equal(1, g.mysql.Insert(item1).ExecuteAffrows());
110+
111+
var item2 = g.mysql.Select<TS_BLB01>().Where(a => a.Id == item1.Id).First();
112+
Assert.Equal(item1.Data.Length, item2.Data.Length);
113+
114+
var str2 = Encoding.UTF8.GetString(item2.Data);
115+
Assert.Equal(str1, str2);
116+
117+
//NoneParameter
118+
item1 = new TS_BLB01 { Data = data1 };
119+
Assert.Equal(1, g.mysql.Insert<TS_BLB01>().NoneParameter().AppendData(item1).ExecuteAffrows());
120+
121+
item2 = g.mysql.Select<TS_BLB01>().Where(a => a.Id == item1.Id).First();
122+
Assert.Equal(item1.Data.Length, item2.Data.Length);
123+
124+
str2 = Encoding.UTF8.GetString(item2.Data);
125+
Assert.Equal(str1, str2);
126+
}
127+
class TS_BLB01
128+
{
129+
public Guid Id { get; set; }
130+
[MaxLength(-2)]
131+
public byte[] Data { get; set; }
132+
}
133+
101134
[Fact]
102135
public void StringLength()
103136
{

FreeSql.Tests/FreeSql.Tests/Oracle/OracleCodeFirstTest.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Oracle.ManagedDataAccess.Client;
44
using System;
55
using System.Collections.Generic;
6+
using System.ComponentModel.DataAnnotations;
67
using System.Linq;
78
using System.Text;
89
using Xunit;
@@ -101,6 +102,7 @@ public void Blob()
101102
class TS_BLB01
102103
{
103104
public Guid Id { get; set; }
105+
[MaxLength(-1)]
104106
public byte[] Data { get; set; }
105107
}
106108
[Fact]

FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System;
88
using System.Collections;
99
using System.Collections.Generic;
10+
using System.ComponentModel.DataAnnotations;
1011
using System.Linq;
1112
using System.Net;
1213
using System.Net.NetworkInformation;
@@ -17,6 +18,38 @@ namespace FreeSql.Tests.PostgreSQL
1718
{
1819
public class PostgreSQLCodeFirstTest
1920
{
21+
[Fact]
22+
public void Blob()
23+
{
24+
var str1 = string.Join(",", Enumerable.Range(0, 10000).Select(a => "我是中国人"));
25+
var data1 = Encoding.UTF8.GetBytes(str1);
26+
27+
var item1 = new TS_BLB01 { Data = data1 };
28+
Assert.Equal(1, g.pgsql.Insert(item1).ExecuteAffrows());
29+
30+
var item2 = g.pgsql.Select<TS_BLB01>().Where(a => a.Id == item1.Id).First();
31+
Assert.Equal(item1.Data.Length, item2.Data.Length);
32+
33+
var str2 = Encoding.UTF8.GetString(item2.Data);
34+
Assert.Equal(str1, str2);
35+
36+
//NoneParameter
37+
item1 = new TS_BLB01 { Data = data1 };
38+
Assert.Equal(1, g.pgsql.Insert<TS_BLB01>().NoneParameter().AppendData(item1).ExecuteAffrows());
39+
40+
item2 = g.pgsql.Select<TS_BLB01>().Where(a => a.Id == item1.Id).First();
41+
Assert.Equal(item1.Data.Length, item2.Data.Length);
42+
43+
str2 = Encoding.UTF8.GetString(item2.Data);
44+
Assert.Equal(str1, str2);
45+
}
46+
class TS_BLB01
47+
{
48+
public Guid Id { get; set; }
49+
[MaxLength(-1)]
50+
public byte[] Data { get; set; }
51+
}
52+
2053
[Fact]
2154
public void StringLength()
2255
{

FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongCodeFirstTest.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System;
33
using System.Collections;
44
using System.Collections.Generic;
5+
using System.ComponentModel.DataAnnotations;
56
using System.Linq;
67
using System.Net;
78
using System.Net.NetworkInformation;
@@ -12,6 +13,7 @@ namespace FreeSql.Tests.ShenTong
1213
{
1314
public class ShenTongCodeFirstTest
1415
{
16+
1517
[Fact]
1618
public void StringLength()
1719
{

FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerCodeFirstTest.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Newtonsoft.Json;
44
using System;
55
using System.Collections.Generic;
6+
using System.ComponentModel.DataAnnotations;
67
using System.Linq;
78
using System.Text;
89
using Xunit;
@@ -11,6 +12,38 @@ namespace FreeSql.Tests.SqlServer
1112
{
1213
public class SqlServerCodeFirstTest
1314
{
15+
[Fact]
16+
public void Blob()
17+
{
18+
var str1 = string.Join(",", Enumerable.Range(0, 10000).Select(a => "我是中国人"));
19+
var data1 = Encoding.UTF8.GetBytes(str1);
20+
21+
var item1 = new TS_BLB01 { Data = data1 };
22+
Assert.Equal(1, g.sqlserver.Insert(item1).ExecuteAffrows());
23+
24+
var item2 = g.sqlserver.Select<TS_BLB01>().Where(a => a.Id == item1.Id).First();
25+
Assert.Equal(item1.Data.Length, item2.Data.Length);
26+
27+
var str2 = Encoding.UTF8.GetString(item2.Data);
28+
Assert.Equal(str1, str2);
29+
30+
//NoneParameter
31+
item1 = new TS_BLB01 { Data = data1 };
32+
Assert.Equal(1, g.sqlserver.Insert<TS_BLB01>().NoneParameter().AppendData(item1).ExecuteAffrows());
33+
34+
item2 = g.sqlserver.Select<TS_BLB01>().Where(a => a.Id == item1.Id).First();
35+
Assert.Equal(item1.Data.Length, item2.Data.Length);
36+
37+
str2 = Encoding.UTF8.GetString(item2.Data);
38+
Assert.Equal(str1, str2);
39+
}
40+
class TS_BLB01
41+
{
42+
public Guid Id { get; set; }
43+
[MaxLength(-1)]
44+
public byte[] Data { get; set; }
45+
}
46+
1447
[Fact]
1548
public void StringLength()
1649
{

FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteCodeFirstTest.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Newtonsoft.Json;
33
using System;
44
using System.Collections.Generic;
5+
using System.ComponentModel.DataAnnotations;
56
using System.Linq;
67
using System.Text;
78
using Xunit;
@@ -10,6 +11,38 @@ namespace FreeSql.Tests.Sqlite
1011
{
1112
public class SqliteCodeFirstTest
1213
{
14+
[Fact]
15+
public void Blob()
16+
{
17+
var str1 = string.Join(",", Enumerable.Range(0, 10000).Select(a => "我是中国人"));
18+
var data1 = Encoding.UTF8.GetBytes(str1);
19+
20+
var item1 = new TS_BLB01 { Data = data1 };
21+
Assert.Equal(1, g.sqlite.Insert(item1).ExecuteAffrows());
22+
23+
var item2 = g.sqlite.Select<TS_BLB01>().Where(a => a.Id == item1.Id).First();
24+
Assert.Equal(item1.Data.Length, item2.Data.Length);
25+
26+
var str2 = Encoding.UTF8.GetString(item2.Data);
27+
Assert.Equal(str1, str2);
28+
29+
//NoneParameter
30+
item1 = new TS_BLB01 { Data = data1 };
31+
Assert.Equal(1, g.sqlite.Insert<TS_BLB01>().NoneParameter().AppendData(item1).ExecuteAffrows());
32+
33+
item2 = g.sqlite.Select<TS_BLB01>().Where(a => a.Id == item1.Id).First();
34+
Assert.Equal(item1.Data.Length, item2.Data.Length);
35+
36+
str2 = Encoding.UTF8.GetString(item2.Data);
37+
Assert.Equal(str1, str2);
38+
}
39+
class TS_BLB01
40+
{
41+
public Guid Id { get; set; }
42+
[MaxLength(-1)]
43+
public byte[] Data { get; set; }
44+
}
45+
1346
[Fact]
1447
public void StringLength()
1548
{

FreeSql/DataAnnotations/ColumnAttribute.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public class ColumnAttribute : Attribute
7979

8080
internal int? _StringLength;
8181
/// <summary>
82-
/// 设置长度,针对 string 类型避免 DbType 的繁琐设置<para></para>
82+
/// 设置长度,针对 string/byte[] 类型避免 DbType 的繁琐设置<para></para>
8383
/// 提示:也可以使用 [MaxLength(100)]<para></para>
8484
/// ---<para></para>
8585
/// StringLength = 100 时,对应 DbType:<para></para>
@@ -90,11 +90,12 @@ public class ColumnAttribute : Attribute
9090
/// Sqlite -> nvarchar(100)<para></para>
9191
/// ---<para></para>
9292
/// StringLength &lt; 0 时,对应 DbType:<para></para>
93-
/// MySql -> text (StringLength = -2 时,对应 DbType longtext)<para></para>
93+
/// MySql -> text (StringLength = -2 时,对应 longtext)<para></para>
9494
/// SqlServer -> nvarchar(max)<para></para>
9595
/// PostgreSQL -> text<para></para>
9696
/// Oracle -> nclob<para></para>
9797
/// Sqlite -> text<para></para>
98+
/// v1.6.0+ byte[] 支持设置 StringLength
9899
/// </summary>
99100
public int StringLength { get => _StringLength ?? 0; set => _StringLength = value; }
100101

0 commit comments

Comments
 (0)