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.35k stars 1.34k forks source link

建议增加一个类似于Nhibernate的version版本号的功能 #964

Closed ioer2008 closed 3 years ago

ioer2008 commented 3 years ago

我以前是使用Nhibernate的,它们有一个int字段的Version,用来处理并发修改的问题, 可以参考一下这篇文章 https://blog.csdn.net/weixin_33754913/article/details/85889869

ioer2008 commented 3 years ago

神速啊

不过时间类型的需要自己去更新标识; int类型的Version可以由SqlSugar来更新标识;

我还是坚持我的建议;

ioer2008 commented 3 years ago

可以这样吗,直观 微信截图_20211011135757

ioer2008 commented 3 years ago

FluentNHibernate里面可以这样配置, 微信图片_20211011141207 如果在update之前查询到version不一致,就直接返回了,我再进行try, 而你上面的是要自己查询是否一致,多了一步,

DotNetNext commented 3 years ago

我发现有这个功能 ,你数据库如果可以自动维护 更改就改成 比如MSSQL的时间戳类型

  [SqlSugar.SugarTable("Student")]
        public class StudentVersion
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public DateTime CreateTime { get; set; }
            [SqlSugar.SugarColumn(IsEnableUpdateVersionValidation = true,IsOnlyIgnoreInsert=true)] //数据库会自动维护
            public byte[] Timestamp { get; set; }
        }

     //is ok
   db.Updateable(data).IsEnableUpdateVersionValidation().ExecuteCommand();
DotNetNext commented 3 years ago

如果你数据库有自动维护 Timestamp 字段或者你用解发器让他更新自动变 就可以用这个现有功能

DotNetNext commented 3 years ago

SqlServer中的时间戳 就可以用我上面的方式

ioer2008 commented 3 years ago

好的,多谢!