知道ActiveRecordBase.Update的朋友请进
朋友们,现在兄弟遇到这样一个问题。
使用ActiveRecord的FINDALL方法将符合条件的对象全部找出来之后,对这些对象进行遍历,并修改。调用Update方法。
代码如下:
if( callInfos != null )
             {
                 foreach(NgnLogBEO beo in callInfos)
                 {
                     switch (deleteFlag)
                     {
                         case NgnLogBEO.DeleteFlag.NotDelete:
                             beo.Deleted = NGN_LOG_DELETED_FLAG_NOT;
                             break;
                         case NgnLogBEO.DeleteFlag.Deleted:
                             beo.Deleted = NGN_LOG_DELETED_FLAG_DELETED;
                             break;
                         default:
                             break;
                     }
                     beo.UpdatedDate = DateTime.Now;
                     beo.Update();
                 }
             }
程序没有错误,代码能运行,并且更新也成功。现在的问题是:
第一:DBA告诉我,在数据库服务器端监视到对这个表的更新效率很低。原因是 “Update ...  WHERE LOG_ID = :P30  --注意该表中LOG_ID为Varchar2型且有唯一性索引,但是若P30为数据类型则该SQL走全表扫描”.
第二:调用 beo.Update()时,内部更新机制是如何? 这个更新是根据主键来更新的吗?
第三:如果是根据主键来更新,那么它封装的更新语句应该是怎样的? where 语句如何封装。是写成 where Log_id=一个值。还是where Log_id='一个值'。还是会根据类型来判断是否使用单引号????
------解决方案--------------------
对象中为String类型  对应varchar2型吧   update是根据主键来更新的   如果对行为String则 对应where子句的会自动添加‘XXXX’