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: