【发布时间】:2015-09-18 17:15:08
【问题描述】:
我们公司的主站点已经使用 Sitefinity 一年多了,我们有一个自定义小部件,该小部件使用通过模块构建器以编程方式创建的模块以及正在开发的新自定义小部件。对于这两个小部件,我们最近开始偶尔收到以下错误:
违反主键约束“pk_sf_dynamic_content”。不能 在对象“dbo.sf_dynamic_content”中插入重复键。复制品 键值为 (581f9be9-f9b8-6ac8-bf63-ff000000686f)。该声明有 被终止了。
我们无法找到它发生时的模式。 Sitefinity 是否正在做一些事情来导致这种情况?我们已经验证它没有被调用两次。作为最后的手段,手动设置项目的 id 不起作用。
这是导致异常被抛出的代码的 sn-p:
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
【问题讨论】:
标签: c# asp.net sitefinity