DotNetNext / SqlSugar

.Net aot ORM Fastest ORM Simple Easy VB.NET Sqlite orm Oracle ORM Mysql Orm 虚谷数据库 postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping
https://www.donet5.com/Home/Doc
MIT License
5.24k stars 1.33k forks source link

MoreSettings DbMinDate 0001-01-01 不生效 #1135

Closed SpikeXy closed 1 year ago

SpikeXy commented 1 year ago

MoreSettings = new ConnMoreSettings() { DbMinDate = Convert.ToDateTime("0001-01-01") },

设置为0001-01-01不生效,修改为1990-01-01生效,旧系统存在大量逻辑使用0001-01-01判断,可否加上这个判断,来兼容老系统?

DotNetNext commented 1 year ago

提供具本测试用例

SpikeXy commented 1 year ago

引入版本

注册代码 services.AddScoped(o => { // 连接字符串 var logger = PublicConfig.loggerFactory.CreateLogger(typeof(SqlsugarSetup).ToString());

                    var listConfig = new List<ConnectionConfig>();
                    listConfig.Add(new ConnectionConfig()
                    {
                        ConnectionString = connectstring,
                        DbType = DbType.MySql,
                        IsAutoCloseConnection = true,
                        //IsShardSameThread = false,                        
                        AopEvents = new AopEvents
                        {
                            OnExecutingChangeSql = (sql, pars) => //可以修改SQL和参数的值

                            {
                                return new KeyValuePair<string, SugarParameter[]>(sql, pars);
                            },
                            OnError = (exp) =>
                            {
                                var sql = UtilMethods.GetSqlString(DbType.MySql, exp.Sql, exp.Parametres as SugarParameter[]);
                                logger.LogError("db error, 错误的sql是" + sql);
                            },
                            OnLogExecuted = (sql, pars) =>
                            {

                            }
                        },
                        MoreSettings = new ConnMoreSettings()
                        {
                            //IsWithNoLockQuery = true,
                            IsAutoRemoveDataCache = true,
                            //设置为0001-01-01不生效,所以只能采用引入sqlsugar源码的方式来使用
                            DbMinDate = Convert.ToDateTime("0001-01-01 00:00:00")
                        },
                        InitKeyType = InitKeyType.Attribute,
                    });
                    return new SqlSugarScope(listConfig);
                });
DotNetNext commented 1 year ago

你这个具体代码实体类都没有

DotNetNext commented 1 year ago

image 并未重现你的问题,请提供完整的用例

SpikeXy commented 1 year ago

https://github.com/SpikeXy/SqlsugarDemo1

SqlsugarSetup.cs 中有2种配置,分别测试后会出现如下结果

微信截图_20230320145305

DotNetNext commented 1 year ago

SqlsugarDemo1-master.rar

​并未重现

DotNetNext commented 1 year ago

你下载DEMO跑一下 image

SpikeXy commented 1 year ago

https://github.com/SpikeXy/SqlsugarDemo1

这个看sql是没有问题,但是执行结果有问题,仍然是 1900-01-01 00:00:00

//看输出SQL var model = new Item_depositamount(); var sql=db.Insertable(model).ToSqlString(); var newid = db.Insertable(model).ExecuteReturnIdentity(); var newid2 = db.Insertable(model).ExecuteCommand();

代码库已更新

DotNetNext commented 1 year ago

image 找到原因了,因这个里面的方法把Paramter的值改了

DotNetNext commented 1 year ago

你这个AOP事件搞错了吧,不应该是修改SQL

DotNetNext commented 1 year ago

删掉这个修改SQL的AOP就行了

SpikeXy commented 1 year ago

好的,我多写了一个扩展方法把这个可以自定义minidate,这个aop挺好用的,谢谢