Skip to content

Commit 824d60c

Browse files
2881028810
authored andcommitted
- 修复 参数化 Column DbType 设置特殊值时的类型判断;
1 parent d951b47 commit 824d60c

File tree

5 files changed

+139
-4
lines changed

5 files changed

+139
-4
lines changed

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

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,51 @@ namespace FreeSql.Tests.MySqlConnector
1111
{
1212
public class MySqlCodeFirstTest
1313
{
14+
[Fact]
15+
public void DateTime_1()
16+
{
17+
var item1 = new TS_DATETIME01 { CreateTime = DateTime.Now };
18+
Assert.Equal(1, g.mysql.Insert(item1).ExecuteAffrows());
19+
20+
var item2 = g.mysql.Select<TS_DATETIME01>().Where(a => a.Id == item1.Id).First();
21+
Assert.NotNull(item2.CreateTime);
22+
Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds));
23+
24+
item1.CreateTime = DateTime.Now;
25+
Assert.Equal(1, g.mysql.Update<TS_DATETIME01>().SetSource(item1).ExecuteAffrows());
26+
item2 = g.mysql.Select<TS_DATETIME01>().Where(a => a.Id == item1.Id).First();
27+
Assert.NotNull(item2.CreateTime);
28+
Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds));
29+
}
30+
class TS_DATETIME01
31+
{
32+
public Guid Id { get; set; }
33+
[Column(DbType = "datetime NULL")]
34+
public DateTime? CreateTime { get; set; }
35+
}
36+
[Fact]
37+
public void DateTime_2()
38+
{
39+
var item1 = new TS_DATETIME02 { CreateTime = DateTime.Now };
40+
Assert.Equal(1, g.mysql.Insert(item1).ExecuteAffrows());
41+
42+
var item2 = g.mysql.Select<TS_DATETIME02>().Where(a => a.Id == item1.Id).First();
43+
Assert.NotNull(item2.CreateTime);
44+
Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds));
45+
46+
item1.CreateTime = DateTime.Now;
47+
Assert.Equal(1, g.mysql.Update<TS_DATETIME02>().SetSource(item1).ExecuteAffrows());
48+
item2 = g.mysql.Select<TS_DATETIME02>().Where(a => a.Id == item1.Id).First();
49+
Assert.NotNull(item2.CreateTime);
50+
Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds));
51+
}
52+
class TS_DATETIME02
53+
{
54+
public Guid Id { get; set; }
55+
[Column(DbType = "datetime NOT NULL")]
56+
public DateTime? CreateTime { get; set; }
57+
}
58+
1459
[Fact]
1560
public void Text_StringLength_1()
1661
{

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

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,51 @@ namespace FreeSql.Tests.MySql
1111
{
1212
public class MySqlCodeFirstTest
1313
{
14+
[Fact]
15+
public void DateTime_1()
16+
{
17+
var item1 = new TS_DATETIME01 { CreateTime = DateTime.Now };
18+
Assert.Equal(1, g.mysql.Insert(item1).ExecuteAffrows());
19+
20+
var item2 = g.mysql.Select<TS_DATETIME01>().Where(a => a.Id == item1.Id).First();
21+
Assert.NotNull(item2.CreateTime);
22+
Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds));
23+
24+
item1.CreateTime = DateTime.Now;
25+
Assert.Equal(1, g.mysql.Update<TS_DATETIME01>().SetSource(item1).ExecuteAffrows());
26+
item2 = g.mysql.Select<TS_DATETIME01>().Where(a => a.Id == item1.Id).First();
27+
Assert.NotNull(item2.CreateTime);
28+
Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds));
29+
}
30+
class TS_DATETIME01
31+
{
32+
public Guid Id { get; set; }
33+
[Column(DbType = "datetime NULL")]
34+
public DateTime? CreateTime { get; set; }
35+
}
36+
[Fact]
37+
public void DateTime_2()
38+
{
39+
var item1 = new TS_DATETIME02 { CreateTime = DateTime.Now };
40+
Assert.Equal(1, g.mysql.Insert(item1).ExecuteAffrows());
41+
42+
var item2 = g.mysql.Select<TS_DATETIME02>().Where(a => a.Id == item1.Id).First();
43+
Assert.NotNull(item2.CreateTime);
44+
Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds));
45+
46+
item1.CreateTime = DateTime.Now;
47+
Assert.Equal(1, g.mysql.Update<TS_DATETIME02>().SetSource(item1).ExecuteAffrows());
48+
item2 = g.mysql.Select<TS_DATETIME02>().Where(a => a.Id == item1.Id).First();
49+
Assert.NotNull(item2.CreateTime);
50+
Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds));
51+
}
52+
class TS_DATETIME02
53+
{
54+
public Guid Id { get; set; }
55+
[Column(DbType = "datetime NOT NULL")]
56+
public DateTime? CreateTime { get; set; }
57+
}
58+
1459
[Fact]
1560
public void Text_StringLength_1()
1661
{

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

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,51 @@ namespace FreeSql.Tests.PostgreSQL
1818
{
1919
public class PostgreSQLCodeFirstTest
2020
{
21+
[Fact]
22+
public void DateTime_1()
23+
{
24+
var item1 = new TS_DATETIME01 { CreateTime = DateTime.Now };
25+
Assert.Equal(1, g.pgsql.Insert(item1).ExecuteAffrows());
26+
27+
var item2 = g.pgsql.Select<TS_DATETIME01>().Where(a => a.Id == item1.Id).First();
28+
Assert.NotNull(item2.CreateTime);
29+
Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds));
30+
31+
item1.CreateTime = DateTime.Now;
32+
Assert.Equal(1, g.pgsql.Update<TS_DATETIME01>().SetSource(item1).ExecuteAffrows());
33+
item2 = g.pgsql.Select<TS_DATETIME01>().Where(a => a.Id == item1.Id).First();
34+
Assert.NotNull(item2.CreateTime);
35+
Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds));
36+
}
37+
class TS_DATETIME01
38+
{
39+
public Guid Id { get; set; }
40+
[Column(DbType = "timestamp NULL")]
41+
public DateTime? CreateTime { get; set; }
42+
}
43+
[Fact]
44+
public void DateTime_2()
45+
{
46+
var item1 = new TS_DATETIME02 { CreateTime = DateTime.Now };
47+
Assert.Equal(1, g.pgsql.Insert(item1).ExecuteAffrows());
48+
49+
var item2 = g.pgsql.Select<TS_DATETIME02>().Where(a => a.Id == item1.Id).First();
50+
Assert.NotNull(item2.CreateTime);
51+
Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds));
52+
53+
item1.CreateTime = DateTime.Now;
54+
Assert.Equal(1, g.pgsql.Update<TS_DATETIME02>().SetSource(item1).ExecuteAffrows());
55+
item2 = g.pgsql.Select<TS_DATETIME02>().Where(a => a.Id == item1.Id).First();
56+
Assert.NotNull(item2.CreateTime);
57+
Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds));
58+
}
59+
class TS_DATETIME02
60+
{
61+
public Guid Id { get; set; }
62+
[Column(DbType = "timestamp NOT NULL")]
63+
public DateTime? CreateTime { get; set; }
64+
}
65+
2166
[Fact]
2267
public void Blob()
2368
{

FreeSql/Internal/UtilsExpressionTree.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -453,12 +453,12 @@ internal static TableInfo GetTableByEntity(Type entity, CommonUtils common)
453453
foreach (var col in trytb.Primarys)
454454
{
455455
col.Attribute.IsNullable = false;
456-
col.Attribute.DbType = col.Attribute.DbType.Replace("NOT NULL", "").Trim();
456+
col.Attribute.DbType = col.Attribute.DbType.Replace("NOT NULL", "").Replace(" NULL", "").Trim();
457457
}
458458
foreach (var col in trytb.Columns.Values)
459459
{
460460
var ltp = @"\(([^\)]+)\)";
461-
col.DbTypeText = Regex.Replace(col.Attribute.DbType.Replace("NOT NULL", "").Trim(), ltp, "");
461+
col.DbTypeText = Regex.Replace(col.Attribute.DbType.Replace("NOT NULL", "").Replace(" NULL", "").Trim(), ltp, "");
462462
var m = Regex.Match(col.Attribute.DbType, ltp);
463463
if (m.Success == false) continue;
464464
var sizeStr = m.Groups[1].Value.Trim();
@@ -884,7 +884,7 @@ public static void AddTableRef(CommonUtils common, TableInfo trytb, PropertyInfo
884884
foreach (var col in tbmid.Primarys)
885885
{
886886
col.Attribute.IsNullable = false;
887-
col.Attribute.DbType = col.Attribute.DbType.Replace("NOT NULL", "").Trim();
887+
col.Attribute.DbType = col.Attribute.DbType.Replace("NOT NULL", "").Replace(" NULL", "").Trim();
888888
}
889889
}
890890
}

Providers/FreeSql.Provider.Oracle/OracleUtils.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public override DbParameter AppendParamter(List<DbParameter> _params, string par
2828
var ret = new OracleParameter { ParameterName = QuoteParamterName(parameterName), OracleDbType = dbtype, Value = value };
2929
if (col != null)
3030
{
31-
var dbtype2 = (OracleDbType)_orm.DbFirst.GetDbType(new DatabaseModel.DbColumnInfo { DbTypeTextFull = col.Attribute.DbType.Replace("NOT NULL", "").Trim(), DbTypeText = col.DbTypeText });
31+
var dbtype2 = (OracleDbType)_orm.DbFirst.GetDbType(new DatabaseModel.DbColumnInfo { DbTypeTextFull = col.Attribute.DbType.Replace("NOT NULL", "").Replace(" NULL", "").Trim(), DbTypeText = col.DbTypeText });
3232
switch (dbtype2)
3333
{
3434
case OracleDbType.Char:

0 commit comments

Comments
 (0)