SubSonic中的字段付值--MakeOld & Update

Jetson Nano新手避坑指南:用Python RPi.GPIO点亮第一个LED(附引脚图详解) 本文为Jetson Nano新手提供详细的Python GPIO编程指南,重点介绍如何使用RPi.GPIO库点亮第一个LED,并附有引脚图详解。内容涵盖GPIO接口认识、硬件连接、Python代码实现及常见问题解决方案,帮助开发者快速入门硬件交互开发。 阅读详情

  根据设计当MakeOld后(在读取数据库后,或者手动调用),对记录(SubSonic生成的类)属性附值时,Sonic会检测这个Value是否与原来的不同,只有值不同时才会附值成功,并将该列添加到DirtyColumns,而DirtyColumns中的列才会被Update采用,一般情况下 只要所有列中有一个列的是Dirty==true(被更改过),那么在Save时就会采用Update,

注意:SubSonic中判断是否采用Update判断“全部字段集合”中是否存在一个字段被更改,而生成Update命令时使用的集合是DirtyColumns集合,而不是直接从全部字段集合中查找那些被更改的字段,在多数情况下不会出问题,但有些时候可能带来意想不到的问题,参考下面的场境3。

//=============参考代码1================

            public bool IsDirty
            {
                get
                {
                    foreach(TableColumnSetting setting in this)
                    {
                        if(setting.IsDirty)
                            return true;
                    }
                    return false;
                }
                //set
                //{
                //    foreach (TableColumnSetting setting in this)
                //        setting.IsDirty = value;
                //}
            }

//============参考代码2============

     public QueryCommand GetSaveCommand(string userName)
        {
            if(IsNew)
                return GetInsertCommand(userName);

            if(IsDirty)
                return GetUpdateCommand(userName);

            return null;
        }

如果您对记录未做任何更改而直接调用 .Save()时会根据IsNew与IsDirty的取值来决定采用Insert或Update。

如果两个多是false,那么就返回null.那么Save操作将什么都不做。

//============参考代码3============

   QueryCommand cmd = GetSaveCommand(userName);
                if(cmd == null)
                    return;

场境1:

Employe emp=new Employe(1);//加载一个员工数据

//这个时候 IsNew=false,IsDirty=false

emp.Name=emp.Name; //没有改变

emp.Save();//这里的Save方法将不做任何处理

 

场境2:

Employe emp=new Employe(1);

emp.Name=txtName.txt;//假设您在文本框中调整了Name取值

//这个时候 isNew=false;IsDirty=true;

emp.Save();将使用Update,并且只更新Name字段。

 

场境3:(报错)

Employe emp=new Employe(1);

Employe backEmp=new Employe();

backEmp.CopyFrom(backEmp);

//copyFrom后会backEmp.IsDirty全部是true

//参考代码7

backEmp.Name="xxxx";

backEmp.MackOld();//将IsNew设置成False

backEmp.Save(); //报错,IsDirty=True,而DirtyColumns为空,

//生成 Update Employe Set Where EmpoyeId=1 这样的错误TSQL

 

场境4:(报错)

Employe emp=new Employe(1);

Employe backEmp=new Employe();

backEmp.CopyFrom(backEmp);

backEmp.MackOld();

backEmp.Name=backEmp.Name;

backEmp.Save();//这时IsDirty是True,而DirtyColumns为空

 

正确作法,应该在backEmp.MackOld();后再调用backEmp.MackClear();

//=============参考代码8=================

      ///


        /// Called after any property is set. Sets IsDirty to true.
        ///

        public void MarkClean()
        {
            foreach(TableSchema.TableColumnSetting setting in columnSettings)
                setting.IsDirty = false;
            DirtyColumns.Clear();
        }

//========参考代码4==========

        ///


        /// Called after Update() invokation. Sets IsNew to false.
        ///

        public void MarkOld()
        {
            IsLoaded = true;
            _isNew = false;
        }

//========参考代码5======================

        ///


        /// Copies the passed-in instance settings to this instance
        ///

        /// The copy instance.
        public void CopyFrom(T copyInstance)
        {
            if(copyInstance == null)
                throw new ArgumentNullException("copyInstance");

            foreach(TableSchema.TableColumnSetting setting in copyInstance.columnSettings)
                SetColumnValue(setting.ColumnName, setting.CurrentValue);
        }

//========参考代码6======================

        ///


        /// Sets a value for a particular column in the record
        ///

        /// Name of the column, as defined in the database
        /// The value to set the type to
        public void SetColumnValue(string columnName, object oValue)
        {
            columnSettings = columnSettings ?? new TableSchema.TableColumnSettingCollection();

            // add the column to the DirtyColumns
            // if this instance has already been loaded
            // and this is a change to existing values
            if(IsLoaded && !IsNew)
            {
                TableSchema.Table schema = GetSchema();
                object oldValue = null;
                string oldValueMsg = "NULL";
                string newValueMsg = "NULL";
                bool areEqualOrBothNull = false;

                try
                {
                    oldValue = columnSettings.GetValue(columnName);
                }
                catch {}

                if(oldValue == null && oValue == null)
                    areEqualOrBothNull = true;
                else
                {
                    if(oldValue != null)
                    {
                        oldValueMsg = oldValue.ToString();
                        areEqualOrBothNull = oldValue.Equals(oValue);
                    }

                    if(oValue != null)
                        newValueMsg = oValue.ToString();
                }

                TableSchema.TableColumn dirtyCol = schema.GetColumn(columnName);

                if(dirtyCol != null && !areEqualOrBothNull)
                {
                    string auditMessage = String.Format("Value changed from {0} to {1}{2}", oldValueMsg, newValueMsg, Environment.NewLine);
                    TableSchema.TableColumn dirtyEntry = DirtyColumns.GetColumn(columnName);
                    if(dirtyEntry != null)
                    {
                        DirtyColumns.Remove(dirtyEntry);
                        auditMessage = String.Concat(dirtyCol.AuditMessage, auditMessage);
                    }

                    dirtyCol.AuditMessage = auditMessage;
                    DirtyColumns.Add(dirtyCol);
                }
            }

            columnSettings.SetValue(columnName, oValue);//这里最终调用参考代码7


        }

//============参考代码7============

            ///


            /// Gets or sets the current value.
            ///

            /// The current value.
            public object CurrentValue
            {
                get { return _currentValue; }
                set
                {
                    if(value == null && _currentValue == null)
                        return;

                    if(value != null)
                    {
                        if(value.Equals(_currentValue))
                            return;
                    }

                    _currentValue = value;
                    _isDirty = true;
                }
            }

fibplus-8.0.0.zip FIBPlus 是一套面向 Delphi / C++Builder 的 Firebird、InterBase 数据库访问组件,特点是直接走原生客户端 API,不经 BDE/ODBC,速度快且可控性强。8.0.0 版本主要适配 Delphi 2009 及以后的版本(Delphi 6–2007 需用 7.9.x),核心组件包括 TpFIBDatabase、TpFIBTransaction、TpFIBDataSet 等,支持精细事务管理、本地缓存、BLOB 处理和备份恢复等数据库服务。该库原为 Devrace 的商业组件,现由社区在 GitHub 的 madorin/fibplus 项目开源维护,建议从官方仓库获取源码而非第三方网盘压缩包。安装时解压后用对应版本的工程组(10.4+ 统一为 `FIB.groupproj`)Build 全部包,再 Install `dclFIB` 并在 Library 路径加入 Source 目录即可。新项目中若需官方技术支持,也可考虑 FireDAC、IBDAC 等更现代的替代方案。 立即下载

相关推荐

基于K8S + apisix/istio 实现云原生模块化微服务.自带代码生成器,能够生成对表的增删改查的逻辑代码

基于K8S + apisix/istio 实现云原生模块化微服务.自带代码生成器,能够生成对表的增删改查的逻辑代码.是标准Maven项目,只依赖springboot,没有hibernate,struts,ibatis,数据库调优可以使用druid输出慢sql,比分析xml中的语句更直观,springrain所有的sql语句都使用Finder封装管理,只要查看Finder的引用即可.

【转】Subsonic的添加和更新、删除操作

Subsonic的添加和更新、删除操作2007-11-30 22:07 例如有数据表: Table Product Id int,(自动增长) Name Nvarchar 用

伊牛娃 1906

工艺部2026年终总结及2027工作规划PPT.pptx

制造业生产、工艺、设备、质量全套 PPT 资料,包含月度经营复盘、季度数据分析、部门年终总结规划、产线与检验规范、TPM 设备保全、质量意识、质量总监高阶培训等课件。内容兼顾经营指标偏差分析、述职汇报、现场制度宣贯、岗位技能教学。 适合操作工、检验员、设备维保员、工艺 / 品质 / 设备工程师、生产主管、各部门部长、质量总监、厂长、内部培训师、精益专员使用,覆盖一线执行、骨干分析、部门负责人述职、高管进阶全层级,可直接用于工厂汇报、内部培训、述职复盘。

subsonic增删改查

//直接执行sql语句查询数据,返回DataTable DataTable dt; QueryCommand qc = new QueryCommand(strSql.ToString(), null); dt =DataService.GetDataSet(q...

weixin_34150503的博客 177

wordbuddy破甲经验分享

wordbuddy破甲经验分享

双闭环PWM整流器VOC控制 +SVPWM调制仿真(Simulink仿真实现)

内容概要:本文详细介绍了一种基于Simulink的双闭环PWM整流器采用虚拟同步发电机控制(VOC)策略与空间矢量脉宽调制(SVPWM)技术的仿真模型。该模型在dq同步旋转坐标系下构建电压定向控制系统,实现了电压外环与电流内环的双闭环控制结构,重点阐述了VOC控制原理、SVPWM调制算法的实现方法及其在Simulink环境中的模块化搭建过程。通过该仿真平台,能够有效实现单位功率因数运行、直流母线电压稳定控制以及优异的动态响应性能,适用于电力电子变换器、新能源并网系统及电机驱动等领域的控制策略验证与性能评估。; 适合人群:电气工程、自动化、电力电子与电力传动等相关专业的高年级本科生、研究生,以及从事电力电子系统仿真、新能源并网控制研究的科研人员和技术工程师。; 使用场景及目标:①深入理解三相PWM整流器在dq坐标系下的数学建模与控制机理;②掌握VOC控制策略的核心思想及其相较于传统矢量控制的优势;③学习SVPWM调制技术的实现流程与Simulink建模技巧;④通过仿真实验验证双闭环控制系统的静态精度与动态稳定性,提升对先进电力电子控制系统的分析与设计能力。; 阅读建议:建议结合电力电子技术、现代控制理论和电机控制相关基础知识进行学习,按照仿真模型的结构逐步分析各功能模块的信号流向与参数配置,重点关注锁相环(PLL)、坐标变换、PI控制器设计及SVPWM模块的实现细节,并可通过调整控制参数观察系统响应变化,以深化对控制策略动态特性的理解。

SubSonic框架使用图解

简介:SubSonic框架是一个优秀的、开源的ORM映射框架,同时提供符合自身需要的代码生成器。   官方下载地址:http://www.subsonic.org/pages/download.jsp  明白了SubSonic是什么之后,下面一起来看SubSonic的使用吧。   开发版本:SubSonic版本为 2.2 + MsSql 2005 + Vs 2010(Web项目.Net ...

weixin_33779515的博客 203

储能双向Buck-Boost+模型预测电流控制+电压下垂控制仿真【附参考文献】(Simulink仿真实现)

内容概要:本文系统介绍了基于Simulink平台构建的储能双向Buck-Boost变换器仿真模型,融合模型预测电流控制与电压下垂控制策略,面向锂电池储能系统的高效充放电管理。该模型深入实现了双闭环控制架构的设计与动态性能分析,涵盖系统建模、关键控制算法实现及稳定性验证,并配套提供参考文献以支撑理论深度与技术复现性。资源包还整合了多种典型电力电子拓扑的仿真案例,如各类DC-DC变换器、谐振变换器、PWM整流器等,充分体现了其在新能源发电、微电网能量调度及电力系统稳定控制中的广泛应用价值和技术延展性。; 适合人群:适用于电气工程、自动化、电力电子及相关专业的高校研究生、科研人员以及从事能源系统仿真与控制设计的工程技术人员;要求具备一定的Simulink/MATLAB操作能力及电力电子与自动控制基础知识;; 使用场景及目标:①深入理解双向Buck-Boost电路在储能系统中的工作机理与能量双向流动控制方法;②掌握模型预测控制(MPC)与下垂控制在实际电力变换系统中的建模流程与参数整定技巧;③为科研课题、学位论文或工程项目提供高可靠性、可复用的仿真原型与技术参考方案; 阅读建议:建议结合文中列出的参考文献与网盘提供的完整仿真资源,按照目录结构循序渐进地学习各模块案例,重点剖析控制逻辑搭建、调节器设计与系统动态响应特性,通过动手仿真与参数调试深化对控制策略性能与鲁棒性的理解。

(四)Subsonic的添加和更新、删除操作

例如有数据表: Table Product Id int,(自动增长) Name Nvarchar 用Subsonic DAL处理后即可如下使用 添加: Product product = new Product(); product.Name="老白干"; product.save(); 更新: Product product =new Product("Id",1); p...

weixin_34241036的博客 162

产业园区在推动科技成果落地时,如何高效匹配企业与技术供给方.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

全桥LLC谐振(变频+移相混合控制)变换器闭环仿真模型(Simulink仿真实现)

内容概要:本文详细介绍了基于Simulink平台构建的全桥LLC谐振变换器闭环仿真模型,采用变频控制与移相控制相结合的混合调制策略,实现高效电能转换与高精度输出稳压。模型完整涵盖了系统建模、谐振腔参数设计、软开关技术实现、双闭环控制系统(如电压外环与频率/相位内环)设计及仿真验证全过程,重点突出零电压开通(ZVS)与零电流关断(ZCS)的实现机制,以显著降低开关损耗,提升变换器效率与动态响应性能。配套资源包含完整的Simulink仿真文件、详细的参数设计报告及核心参考文献,为深入理解LLC谐振变换器的工作机理、控制策略优化及其在开关电源、新能源发电等领域的工程应用提供了坚实的技术支撑。; 适合人群:具备电力电子技术、自动控制理论基础,从事高频开关电源、新能源变换器、车载充电机或相关方向研究的研究生、科研人员及电气工程师。; 使用场景及目标:①系统学习全桥LLC谐振变换器的精确建模与仿真方法;②掌握变频+移相混合控制策略的设计原理与实现技巧;③开展高效率、高功率密度电源变换器的科研攻关与工程项目开发;④深入理解软开关技术在实际电路中的应用与优势; 阅读建议:建议结合所提供的仿真模型与设计报告进行动手实践,重点分析控制器参数整定过程、谐振元件(Lr, Cr, Lm)的参数匹配关系,并仔细观察仿真波形,以深刻把握系统的稳态特性、瞬态响应能力及控制稳定性,从而全面提升对复杂谐振变换器系统的设计与分析水平。

SubSonic基本操作

 SubSonic2.1版本 – 例出3种查询。Product product = new Select().From() .Where(Product.ProductIDColumn).IsEqualTo(4) .ExecuteSingle();Product product = DB.Select().From() .Where("Produc

BraveHeart专栏 2903

PR控制以及使用PR控制用于单相离/并网逆变器

最近想学习一下并网逆变器,需要用到PR控制,全网找遍了许多学习资料,终于掌握的差不多了,在此做个记录,以及个人对PR(Proportional Resonant)控制的理解。在去年7月准备电赛的时候偶然看到有几篇讲解数字滤波器,第一次接触传递函数离散化,深刻被数字时代的数字方式折服,改改代码,就可以实现不同的截至频率,甚至不同阶数,而模拟方式还要改元器件。当时就感觉这玩意太他妈牛逼了,很想学懂它,奈何学不会呀。后面全身心做电赛,就忘了这事儿。直至最近学习PR控制,当初的感觉又回来了,一股劲儿吃下来了。

xht2403267701的博客 3万+

MATLAB三维路径规划实战:从RRT到Informed-RRT*,手把手教你避坑与调参

本文详细介绍了在MATLAB中实现三维路径规划算法(RRT、RRT*和Informed-RRT*)的实战技巧与调参方法。从环境配置到算法优化,再到三维环境适配与可视化,提供了全面的避坑指南和性能对比数据,帮助开发者高效解决路径规划中的常见问题。

weixin_33747129的博客 398

03.Linux下目录动态扩容,以分配home的部分空间给root为例

本篇文章将介绍Linux下分配home目录的部分空间给root目录。大致思路:卸载home,解除其磁盘容量占用->扩容root,增加其磁盘空间->重建恢复home操作演示环境为CentOS系统,其他操作系统例如openEuler也可作为参考。01.Linux下目录扩容,以增加root目录的磁盘容量分配为例操作系统版本如下名称版本CentOS7.6+

ChennyWJS的博客 2337

STM32F407+LAN8720A+LwIP实战:FreeModbus TCP从机功能开发指南

本文详细介绍了基于STM32F407和LAN8720A硬件平台,结合LwIP协议栈实现FreeModbus TCP从机功能的开发指南。内容涵盖硬件连接、LwIP移植、FreeModbus TCP从机实现、任务调度及调试技巧,为工业控制领域的以太网通信开发提供实用参考。

weixin_29190651的博客 546

Subsonic的使用之基本语法、操作(2)

查询 SubSonic2.1版本 – 例出3种查询。 Product product = new Select().From<Product>() .Where(Product.ProductIDColumn).IsEqualTo(4) .ExecuteSingle<Product>(); Product product = D...

weixin_34290096的博客 274

2025虚幻游戏逆向工程解包尝试

2025虚幻游戏逆向工程解包指南 本文详细介绍了虚幻引擎5游戏逆向解包的完整流程,主要包括获取AES密钥、生成映射文件和导出资源三个关键步骤。作者在实际操作中遇到诸多难题:AES密钥获取工具存在加壳保护问题,映射文件生成器依赖复杂的VS编译环境,DLL注入工具的使用也存在技术门槛。通过多次尝试,作者发现部分游戏可直接搜索现成的AES密钥,而映射文件生成需要额外下载Memcury依赖库才能正常编译。文章提供了相关工具的下载链接和具体操作说明,但同时也指出每个环节都可能出现意外状况,逆向工程实际执行过程远比理论

wsdchong的博客 6149

关于SubSonic3.0插件使用实体进行更新操作时(执行T.Update()或T.Save()),某些列无法进行修改操作的问题处理...

  SubSonic3.0插件在创建实体后,对实体进行赋值操作时,为了去除一些不必要更新的字段,减少更新的内容,会将更新内容与默认值进行比较,如果默认值与当前更新的内容相等时,则不提交更新本列,这主要是为新增记录时设置的,因为本列虽然不进行更新,但由于数据库里存在默认值,所以提交后数据库会自动判断使用默认值进行填充。   比如数据库有表Test,有字段StatusName nvrchar(10)...

weixin_34099526的博客 192

ROS2初级面试题汇总

总结和收集了一些关于ros2的问题和解答记录

qq_57633442的博客 5555

RV1126上YOLOv8部署实战:从模型转换到板端推理的完整避坑指南

本文提供了在瑞芯微RV1126芯片上部署YOLOv8目标识别算法的完整实战指南。内容涵盖从模型转换、环境搭建到板端推理代码编写的全流程,重点解析了RKNN-Toolkit使用、量化配置、内存优化及后处理实现等关键环节的常见问题与解决方案,旨在帮助开发者高效避坑,实现边缘AI应用的稳定落地。

pz89012345的博客 567

Subsonic的使用之基本语法、操作

<br />这里简单介绍一下Subsonic的一些基本操作语法:如查询、新增、修改、删除操作等。 注:个人学习和使用总结,仅供参考,不足之处,敬请批评指证!以下的语句都是经过测试通过的! 查询: 可以使用new Select()….或DB.Select()的方式,个人习惯用DB,所以后面的其他操作都将使用“DB.”! 最简单的查询: SqlQuery query = DB.Select().From(CyUser.Schema) return query.ExecuteData

moduofanchen的专栏 1324

Unity3D实战:用EasyAR4.0稀疏空间地图打造AR导航应用(附完整代码)

本文详细介绍了如何使用Unity3D和EasyAR4.0的SparseSpatialMap功能构建AR导航应用。通过稀疏空间地图技术,开发者可以创建室内导航系统,解决传统GPS在室内环境中的局限性。文章包含完整代码示例,涵盖环境配置、地图构建、导航实现及性能优化等关键步骤,助力开发者快速掌握AR导航开发技巧。

t8u9v0的博客 1197
上一篇: flash上加链接a标签--IE,FireFox测试通过
下一篇: 广告位管理系统--跨域广告加载问题
WDFrog
博客等级 码龄21年 7粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值