这段时间在做FileGDB的要素编辑,以前做过shp的编辑,以为startedit了就没事了,结果,给我报了一个Objects in this class cannot be updated outside an edit session的错误。我相信大多数朋友都遇到过这个错误,不错是在编辑SDE啊,拓扑图层啊什么的时候,关于这个问题,我找了一点资料,分享:
(感谢旅途:http://blog.csdn.net/mydriverc/archive/2007/09/25/1799749.aspx)
问题
当一个要素类参与了一个拓扑(或Geometry Network)之后,对该要素类执行创建要素、修改要素图形或属性时,可能会出现这个异常:'Objects in this class cannot be updated outside an edit session'
原因
这是由于ArcEngine应用程序中使用的License权限不足引起的。在ArcEngine 应用程序里面通过ArcSDE进行编辑需要License'ArcGIS Engine Enterprise Geodatabase',或ArcEditor或ArcInfo。
解决办法
在ArcEngine应用程序的LicenseInitializer.InitializeApplication中,为程序增加Geodatabase的编辑权限。
Public Function InitializeApplicationFunction InitializeApplication As Boolean
'……
licenseStatus = CheckOutLicensesesriLicenseProductCode.esriLicenseProductCodeEngineGeoDB
licenseStatus = CheckOutLicensesesriLicenseProductCode.esriLicenseProductCodeEngine
'……
End Function
关于许可的区别,在这里:
(1) Registered As Visioned without the option to move edits to base
能够实现的操作包括Undo和Redo操作、长事务编辑、为设计和工程使用命名版本、使用Geodatabase归档、使用数据库复制。
不能做的事:创建拓扑、从拓扑中添加或删除要素、添加和删除拓扑规则、创建几何网络、从几何网络中添加或删除要素类。
(2) registered as visioned with the option to move edits to base
不能够做的事:编辑参与拓扑和几何网络的要素类、数据库归档、数据库复制
(3)not registered as versioned
是最原始的状态,能够实现复杂数据类型,包括拓扑和几何网络的编辑与更新。因为Default版本是数据库中最关键的,需要经常更新,因此需要对Default版本定期备份。
这些资料可以解决很多问题了。但还是没有解决我的问题,因为我是编辑本机的数据,而且要素只是独立的点图层,没有其他的关联。
终于在ESRI论坛里gongcj的回复: