SPPersistedObject和List <t> </t>

时间:2010-03-08 17:47:27

标签: sharepoint list persistence

我希望sharepoint“持久化”对象列表

我写了一个继承自SPPersistedObject的SPAlert类:

public class SMSAlert: SPPersistedObject
{
        [Persisted]
        private DateTime _scheduledTime;

        [Persisted]
        private Guid _listId;
        [Persisted]
        private Guid _siteID;
}

然后我写了一个继承自SPJobDefinition的类,添加了我之前对象的List:

public sealed class MyCustomJob: SPJobDefinition
{


        [Persisted]
        private List<SMSAlert> _SMSAlerts;
}

问题是:

当我调用y MyCustomJob的Update方法时:

myCustomJob.Update();

抛出异常:

消息:

  

SharePoint中的对象   行政框架,取决于   其他不存在的对象。   确保所有对象   创建依赖项并重试   这个操作。

  

在   Microsoft.SharePoint.Administration.SPConfigurationDatabase.StoreObject(SPPersistedObject   obj,Boolean storeClassIfNecessary,   布尔确保)   Microsoft.SharePoint.Administration.SPConfigurationDatabase.PutObject(SPPersistedObject   obj,布尔确保)at   Microsoft.SharePoint.Administration.SPPersistedObject.Update()   在   Microsoft.SharePoint.Administration.SPJobDefinition.Update()   在   Sigi.Common.AlertBySMS.SmsAlertHandler.ScheduleJob(的SPWeb   web,SPAlertHandlerParams ahp)

内部异常

  

SharePoint中的对象   行政框架取决于   其他不存在的对象。

     

INSERT语句与之冲突   FOREIGN KEY约束   “FK_Dependencies1_Objects”。

     

数据库中发生冲突   “SharePoint_Config,表格   “dbo.Objects”,列'Id'。该   声明已被终止。

任何人都可以帮我吗?

3 个答案:

答案 0 :(得分:2)

使用[System.Runtime.InteropServices.Guid(&#34; GUID&#34;)]确保您的类标有唯一的GUID,并确保持久对象的类具有默认构造函数。希望这有帮助。

答案 1 :(得分:2)

以上建议都非常重要,添加了Guid属性并确保您拥有默认构造函数。不仅适用于持久的SMSAlert对象,还要确保您的SPJobDefinition也适用。

此外,如果您创建SPPersistedObject的集合,则必须确保集合中的每个对象也都已更新。更好的选择是使SMSAlert成为SPAutoSerializingObject。 SPAutoSerializingObject的集合,顾名思义,是自动序列化的。

有关持久对象的更多信息,请参阅此非常有用的帖子: http://www.chaholl.com/archive/2011/01/30/the-skinny-on-sppersistedobject-and-the-hierarchical-object-store-in.aspx

答案 2 :(得分:1)

您是否指定了SMSAlert的默认构造函数?