关于SubSonic3.0插件使用实体进行更新操作时(执行T.Update()或T.Save()),某些列无法进行修改操作的问题处理
2013-08-17 12:36
1086 查看
SubSonic3.0插件在创建实体后,对实体进行赋值操作时,为了去除一些不必要更新的字段,减少更新的内容,会将更新内容与默认值进行比较,如果默认值与当前更新的内容相等时,则不提交更新本列,这主要是为新增记录时设置的,因为本列虽然不进行更新,但由于数据库里存在默认值,所以提交后数据库会自动判断使用默认值进行填充。
比如数据库有表Test,有字段StatusName nvrchar(10), StatusId int,默认值为0,正常新增记录语句为 insert into Test (StatusNam, StatusId) values('名称', 0); 但由于StatusId有默认值,而提交的值同默认值相等的话,实际新增记录语句为insert into Test (StatusNam) values('名称'); 就可以了。
而SubSonic3.0插件在做修改操作时,由于没有进行判断当前操作是新增还是修改操作,所以同新增记录操作一视同仁,直接将修改该状态值的操作给过滤了,这些列的值也就无法更新,具体修改如下:
打开模版文件ActiveRecord.tt,找到下面代码
View Code
修改后生成的代码就会改变为:
将SubSonic3.0插件源码重新生成一下就可以正常使用了。
本文章为原创内容,转载请保留下面信息。
发表本编内容,只要主为了和大家共同学习共同进步,有兴趣的朋友可以加加Q群:SubSonic3.0学习群(327360708)或Email给我(1654937#qq.com),大家一起探讨,由于本人工作很繁忙,如果疑问请先留言,回复不及时也请谅解。
想了解更多SubSonic3.0的相关问题,请观注博客:http://www.cnblogs.com/EmptyFS/
比如数据库有表Test,有字段StatusName nvrchar(10), StatusId int,默认值为0,正常新增记录语句为 insert into Test (StatusNam, StatusId) values('名称', 0); 但由于StatusId有默认值,而提交的值同默认值相等的话,实际新增记录语句为insert into Test (StatusNam) values('名称'); 就可以了。
而SubSonic3.0插件在做修改操作时,由于没有进行判断当前操作是新增还是修改操作,所以同新增记录操作一视同仁,直接将修改该状态值的操作给过滤了,这些列的值也就无法更新,具体修改如下:
打开模版文件ActiveRecord.tt,找到下面代码
<#=col.SysType #><#=CheckNullable(col)#> _<#=col.CleanName #>; public <#=col.SysType #><#=CheckNullable(col)#> <#=col.CleanName #> { get { return _<#=col.CleanName #>; } set { if(_<#=col.CleanName #>!=value || _isLoaded){ _<#=col.CleanName #>=value; var col=tbl.Columns.SingleOrDefault(x=>x.Name=="<#=col.Name #>"); if(col!=null){ if(!_dirtyColumns.Any(x=>x.Name==col.Name) && _isLoaded){ _dirtyColumns.Add(col); } } OnChanged(); } } }
View Code
修改后生成的代码就会改变为:
将SubSonic3.0插件源码重新生成一下就可以正常使用了。
本文章为原创内容,转载请保留下面信息。
发表本编内容,只要主为了和大家共同学习共同进步,有兴趣的朋友可以加加Q群:SubSonic3.0学习群(327360708)或Email给我(1654937#qq.com),大家一起探讨,由于本人工作很繁忙,如果疑问请先留言,回复不及时也请谅解。
想了解更多SubSonic3.0的相关问题,请观注博客:http://www.cnblogs.com/EmptyFS/
相关文章推荐
- 关于SubSonic3.0插件使用Json反序列化获得的实体进行更新操作时,只能执行添加而不能执行修改(编辑)操作的处理
- 关于SubSonic3.0插件使用Json反序列化获得的实体进行更新操作时,只能执行添加而不能执行修改(编辑)操作的处理
- “请求的操作无法在使用用户映射区域打开的文件上执行”问题处理
- 关于SubSonic3.0插件使用SubSonic.Query.Select查询时,字段类型为tinyint时列丢失问题的Bug修复
- 集合已修改;枚举操作可能无法执行。使用foreach 循环删除DataRow的时候的问题! 该死的AcceptChanges() Row.elete() Remove(Row)使用不同。
- “请求的操作无法在使用用户映射区域打开的文件上执行”问题处理
- idea jetty插件启动服务后,修改代码报“请求的操作无法在使用用户映射区域打开的文件执行”
- 关于mybatis进行Update时,无法更新的问题
- 关于Jpa使用Update方法进行更新操作,却没有同步到数据库的原因
- 关于在执行hibernate3.0的save方法后数据无法添加到数据库的问题
- Node.js使用orm2进行update操作时关联字段无法修改的解决方法
- 关于在子线程中在run方法执行完之后通知主线程进行操作的方法。(Toast在子线程中无法使用)
- 金牌信通V6无法打开,报错,出现问题,不能使用,更新失败,请求失败等问题处理方式
- 关于Ubuntu使用Sublime Text3的SublimeClang插件进行C程序编写时的问题
- 关于Eclipse的git功能(egit插件)执行replace 依然显示差异问题的处理
- 关于SubSonic3.0插件使用SqlQuery或Select查询时产生的System.NullReferenceException异常修复
- 关于使用图片轮播插件无法实现效果的问题
- 使用hta在本地注入远程网页进行操作,解决hta不共享ie session和某些权限问题
- 关于在页面加载完后使用js修改图片高度进行手机屏幕适配的问题
- ASP.Net下如何解决关于Access数据库“操作必须使用一个可更新的查询”问题