Sitefinity动态内容重复键异常

时间:2015-09-18 17:15:09

标签: c# asp.net sitefinity

我们公司的主站点已经使用Sitefinity超过一年了,我们有一个自定义小部件,它使用通过模块构建器以编程方式创建的模块,并在开发中使用新的自定义小部件。对于这两个小部件,我们最近偶尔开始收到以下错误:

  

违反PRIMARY KEY约束'pk_sf_dynamic_content'。不能   在对象'dbo.sf_dynamic_content'中插入重复键。重复   键值为(581f9be9-f9b8-6ac8-bf63-ff000000686f)。声明有   已被终止。

我们无法在发生时找到模式。 Sitefinity会做些什么来引起这种情况吗?我们已经确认它没有被调用两次。作为最后的手段,手动设置项目上的ID并不起作用。

这里是引发异常的代码片段:

DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager(String.Empty);

Type downloadType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.Resources.Download");
DynamicContent item = dynamicModuleManager.CreateDataItem(downloadType);

var downloadID = Guid.NewGuid().ToString();
item.SetValue("DownloadID", downloadID);
item.SetValue("DateDownloaded", DateTime.Now);

item.SetString("UrlName", downloadID);
item.SetValue("Owner", SecurityManager.GetCurrentUserId());
item.SetValue("PublicationDate", DateTime.Now);
item.SetWorkflowStatus(dynamicModuleManager.Provider.ApplicationName, "Published");

// Attach User & Resource
var userType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.Resources.User");
var userItem = dynamicModuleManager.GetDataItems(userType).FirstOrDefault(d => d.GetValue<string>("UserID").ToString().Equals(user.UserID) && d.Status == ContentLifecycleStatus.Master);
if (userItem != null)
{
    item.CreateRelation(userItem, "User");
}

var resourceType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.Resources.Resource");
var resourceItem = dynamicModuleManager.GetDataItems(resourceType).FirstOrDefault(d => d.GetValue<string>("ResourceID").ToString().Equals(resource.ResourceId) && d.Status == ContentLifecycleStatus.Master);
if (resourceItem != null)
{
    item.CreateRelation(resourceItem, "Resource");
}

// Save Download
dynamicModuleManager.Provider.SuppressSecurityChecks = true;
dynamicModuleManager.SaveChanges(); //<== exception here

1 个答案:

答案 0 :(得分:0)

这通常是由于多个项目具有相同的urlname。这是针对sitefinty或title字段标识的唯一。在创建项目之前,请先查看此项以确保唯一性。