From 824d60cbb2cbcffe67a6cddcc73fed84644d33e5 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Mon, 24 Aug 2020 13:35:48 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=8C=96=20Column=20DbType=20=E8=AE=BE=E7=BD=AE=E7=89=B9?= =?UTF-8?q?=E6=AE=8A=E5=80=BC=E6=97=B6=E7=9A=84=E7=B1=BB=E5=9E=8B=E5=88=A4?= =?UTF-8?q?=E6=96=AD=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MySqlConnector/MySqlCodeFirstTest.cs | 45 +++++++++++++++++++ .../FreeSql.Tests/MySql/MySqlCodeFirstTest.cs | 45 +++++++++++++++++++ .../PostgreSQL/PostgreSQLCodeFirstTest.cs | 45 +++++++++++++++++++ FreeSql/Internal/UtilsExpressionTree.cs | 6 +-- .../FreeSql.Provider.Oracle/OracleUtils.cs | 2 +- 5 files changed, 139 insertions(+), 4 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlCodeFirstTest.cs index 8d279e69..cef82a4c 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlCodeFirstTest.cs @@ -11,6 +11,51 @@ namespace FreeSql.Tests.MySqlConnector { public class MySqlCodeFirstTest { + [Fact] + public void DateTime_1() + { + var item1 = new TS_DATETIME01 { CreateTime = DateTime.Now }; + Assert.Equal(1, g.mysql.Insert(item1).ExecuteAffrows()); + + var item2 = g.mysql.Select().Where(a => a.Id == item1.Id).First(); + Assert.NotNull(item2.CreateTime); + Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds)); + + item1.CreateTime = DateTime.Now; + Assert.Equal(1, g.mysql.Update().SetSource(item1).ExecuteAffrows()); + item2 = g.mysql.Select().Where(a => a.Id == item1.Id).First(); + Assert.NotNull(item2.CreateTime); + Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds)); + } + class TS_DATETIME01 + { + public Guid Id { get; set; } + [Column(DbType = "datetime NULL")] + public DateTime? CreateTime { get; set; } + } + [Fact] + public void DateTime_2() + { + var item1 = new TS_DATETIME02 { CreateTime = DateTime.Now }; + Assert.Equal(1, g.mysql.Insert(item1).ExecuteAffrows()); + + var item2 = g.mysql.Select().Where(a => a.Id == item1.Id).First(); + Assert.NotNull(item2.CreateTime); + Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds)); + + item1.CreateTime = DateTime.Now; + Assert.Equal(1, g.mysql.Update().SetSource(item1).ExecuteAffrows()); + item2 = g.mysql.Select().Where(a => a.Id == item1.Id).First(); + Assert.NotNull(item2.CreateTime); + Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds)); + } + class TS_DATETIME02 + { + public Guid Id { get; set; } + [Column(DbType = "datetime NOT NULL")] + public DateTime? CreateTime { get; set; } + } + [Fact] public void Text_StringLength_1() { diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlCodeFirstTest.cs index 463a101e..2612b4b2 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlCodeFirstTest.cs @@ -11,6 +11,51 @@ namespace FreeSql.Tests.MySql { public class MySqlCodeFirstTest { + [Fact] + public void DateTime_1() + { + var item1 = new TS_DATETIME01 { CreateTime = DateTime.Now }; + Assert.Equal(1, g.mysql.Insert(item1).ExecuteAffrows()); + + var item2 = g.mysql.Select().Where(a => a.Id == item1.Id).First(); + Assert.NotNull(item2.CreateTime); + Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds)); + + item1.CreateTime = DateTime.Now; + Assert.Equal(1, g.mysql.Update().SetSource(item1).ExecuteAffrows()); + item2 = g.mysql.Select().Where(a => a.Id == item1.Id).First(); + Assert.NotNull(item2.CreateTime); + Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds)); + } + class TS_DATETIME01 + { + public Guid Id { get; set; } + [Column(DbType = "datetime NULL")] + public DateTime? CreateTime { get; set; } + } + [Fact] + public void DateTime_2() + { + var item1 = new TS_DATETIME02 { CreateTime = DateTime.Now }; + Assert.Equal(1, g.mysql.Insert(item1).ExecuteAffrows()); + + var item2 = g.mysql.Select().Where(a => a.Id == item1.Id).First(); + Assert.NotNull(item2.CreateTime); + Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds)); + + item1.CreateTime = DateTime.Now; + Assert.Equal(1, g.mysql.Update().SetSource(item1).ExecuteAffrows()); + item2 = g.mysql.Select().Where(a => a.Id == item1.Id).First(); + Assert.NotNull(item2.CreateTime); + Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds)); + } + class TS_DATETIME02 + { + public Guid Id { get; set; } + [Column(DbType = "datetime NOT NULL")] + public DateTime? CreateTime { get; set; } + } + [Fact] public void Text_StringLength_1() { diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs index f4ee21d6..bfb8976e 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs @@ -18,6 +18,51 @@ namespace FreeSql.Tests.PostgreSQL { public class PostgreSQLCodeFirstTest { + [Fact] + public void DateTime_1() + { + var item1 = new TS_DATETIME01 { CreateTime = DateTime.Now }; + Assert.Equal(1, g.pgsql.Insert(item1).ExecuteAffrows()); + + var item2 = g.pgsql.Select().Where(a => a.Id == item1.Id).First(); + Assert.NotNull(item2.CreateTime); + Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds)); + + item1.CreateTime = DateTime.Now; + Assert.Equal(1, g.pgsql.Update().SetSource(item1).ExecuteAffrows()); + item2 = g.pgsql.Select().Where(a => a.Id == item1.Id).First(); + Assert.NotNull(item2.CreateTime); + Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds)); + } + class TS_DATETIME01 + { + public Guid Id { get; set; } + [Column(DbType = "timestamp NULL")] + public DateTime? CreateTime { get; set; } + } + [Fact] + public void DateTime_2() + { + var item1 = new TS_DATETIME02 { CreateTime = DateTime.Now }; + Assert.Equal(1, g.pgsql.Insert(item1).ExecuteAffrows()); + + var item2 = g.pgsql.Select().Where(a => a.Id == item1.Id).First(); + Assert.NotNull(item2.CreateTime); + Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds)); + + item1.CreateTime = DateTime.Now; + Assert.Equal(1, g.pgsql.Update().SetSource(item1).ExecuteAffrows()); + item2 = g.pgsql.Select().Where(a => a.Id == item1.Id).First(); + Assert.NotNull(item2.CreateTime); + Assert.True(1 > Math.Abs(item2.CreateTime.Value.Subtract(item1.CreateTime.Value).TotalSeconds)); + } + class TS_DATETIME02 + { + public Guid Id { get; set; } + [Column(DbType = "timestamp NOT NULL")] + public DateTime? CreateTime { get; set; } + } + [Fact] public void Blob() { diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index 24aeb1f8..42b027d0 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -453,12 +453,12 @@ namespace FreeSql.Internal foreach (var col in trytb.Primarys) { col.Attribute.IsNullable = false; - col.Attribute.DbType = col.Attribute.DbType.Replace("NOT NULL", "").Trim(); + col.Attribute.DbType = col.Attribute.DbType.Replace("NOT NULL", "").Replace(" NULL", "").Trim(); } foreach (var col in trytb.Columns.Values) { var ltp = @"\(([^\)]+)\)"; - col.DbTypeText = Regex.Replace(col.Attribute.DbType.Replace("NOT NULL", "").Trim(), ltp, ""); + col.DbTypeText = Regex.Replace(col.Attribute.DbType.Replace("NOT NULL", "").Replace(" NULL", "").Trim(), ltp, ""); var m = Regex.Match(col.Attribute.DbType, ltp); if (m.Success == false) continue; var sizeStr = m.Groups[1].Value.Trim(); @@ -884,7 +884,7 @@ namespace FreeSql.Internal foreach (var col in tbmid.Primarys) { col.Attribute.IsNullable = false; - col.Attribute.DbType = col.Attribute.DbType.Replace("NOT NULL", "").Trim(); + col.Attribute.DbType = col.Attribute.DbType.Replace("NOT NULL", "").Replace(" NULL", "").Trim(); } } } diff --git a/Providers/FreeSql.Provider.Oracle/OracleUtils.cs b/Providers/FreeSql.Provider.Oracle/OracleUtils.cs index c6eaca38..4538a0ff 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleUtils.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleUtils.cs @@ -28,7 +28,7 @@ namespace FreeSql.Oracle var ret = new OracleParameter { ParameterName = QuoteParamterName(parameterName), OracleDbType = dbtype, Value = value }; if (col != null) { - var dbtype2 = (OracleDbType)_orm.DbFirst.GetDbType(new DatabaseModel.DbColumnInfo { DbTypeTextFull = col.Attribute.DbType.Replace("NOT NULL", "").Trim(), DbTypeText = col.DbTypeText }); + var dbtype2 = (OracleDbType)_orm.DbFirst.GetDbType(new DatabaseModel.DbColumnInfo { DbTypeTextFull = col.Attribute.DbType.Replace("NOT NULL", "").Replace(" NULL", "").Trim(), DbTypeText = col.DbTypeText }); switch (dbtype2) { case OracleDbType.Char: