Property Bags Object Model中的小“陷阱”

简介:
今天在调试一个SharePoint程序的时候,发现一个Bug。SharePoint 2007中对SPWeb、SPFolder、SPListItem都提供了一个方便的 Property Bags 特性,用来存放一些自定义的属性信息,就像这样:

SPListItem item = ...;
item.Properties["MyProp1"] = "PropValue1";
item.Properties["MyProp2"] = "PropValue2";
item.Update();


我发现的Bug是,有一些存放在SPWeb.Properties中的自定义属性,没有正确的保存到Content Database中。仔细检查了一下,发现了原因所在。这个小问题确实容易成为一个代码中的“陷阱”,所以提醒一下大家。

SPFolder、SPListItem的Property Bags(即SPFolder.Properties / SPListItem.Properties)都是直接使用一个Hashtable来实现的,当我们调用SPFolder.Update()或SPListItem.Update()时,就能把它们的Property Bags里面的数据也写回到Content Database。

但是,SPWeb.Properties是通过一个定制的SPPropertyBag类(继承自System.Collections.Specialized.StringDictionary)来实现的,通过调用SPWeb.Update()并不会将Property Bags中的数据写回到Content Database,而是需要调用SPPropertyBag.Update()方法。示例:

SPWeb web = SPContext.Current.Web;
web.Properties["MyProp1"] = "PropValue1";
web.Properties.Update();


我不知道为什么它们有这样的设计区别,但个人猜测最大的可能,是SPFolder/SPListItem和SPWeb的实现不是一个Developer写的,写SPFolder/SPListItem的Developer想了一下,觉得使用一个简单的Hashtable就足够了,而写SPWeb的Developer则觉得应该专门定义一个SPPropertyBag类,这样整个项目中不同的需要使用Property Bags特性的类都可以重用这个SPPropertyBag。可惜,就像那句老话说的:“开发人员精心设计用来重用的东东,90%的可能都不会有被重用的可能”... :)




本文转自 kaneb0y 51CTO博客,原文链接:http://blog.51cto.com/kaneboy/280835,如需转载请自行联系原作者
目录
相关文章
|
JavaScript 前端开发 API
DOM编程:Document Object Model
DOM编程:Document Object Model
|
10月前
|
XML 存储 Java
Project Object Model
“【5月更文挑战第28天】”
49 2
|
前端开发 JavaScript
前端vue:解决Invalid prop: type check failed for prop “model“. Expected Object, got Array问题
前端vue:解决Invalid prop: type check failed for prop “model“. Expected Object, got Array问题
前端vue:解决Invalid prop: type check failed for prop “model“. Expected Object, got Array问题
成功解决AttributeError: ‘PathCollection‘ object has no property ‘n_levels‘
成功解决AttributeError: ‘PathCollection‘ object has no property ‘n_levels‘
|
JavaScript 数据库 图形学
对象模型(Object Model)
对象模型(Object Model)是一种用于描述计算机程序中对象的结构、行为和关系的概念模型。它提供了一种组织和操作对象的方式,通常用于面向对象编程(OOP)语言中。下面是一个简单的示例,演示如何使用对象模型来实现一个简单的学生信息管理系统的代码。
467 1
|
缓存 JavaScript Go
BOM(Browser Object Model)
BOM(Browser Object Model)
81 0
解决AttributeError: ‘model‘ object has no attribute ‘copy‘
原因是没有使用model.state_dict()进行模型保存,但是使用了model.load_state_dict()加载模型。这两者要配套使用。
613 0
解决Invalid prop: type check failed for prop “model“. Expected Object, got Array问题
解决Invalid prop: type check failed for prop “model“. Expected Object, got Array问题
解决Invalid prop: type check failed for prop “model“. Expected Object, got Array问题
|
PyTorch 算法框架/工具
AttributeError: ‘model’ object has no attribute ‘copy’-pytorch
AttributeError: ‘model’ object has no attribute ‘copy’-pytorch
|
数据可视化 Python
AttributeError: ‘Rectangle‘ object has no property ‘normed‘ 解决方法 matplotlib绘图
AttributeError: ‘Rectangle‘ object has no property ‘normed‘
955 0
AttributeError: ‘Rectangle‘ object has no property ‘normed‘ 解决方法 matplotlib绘图

热门文章

最新文章