【问题标题】:Sitefinity Dynamic Content Duplicate Key ExceptionSitefinity 动态内容重复键异常
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • Jon R 是对的 - 在后端编辑下载模块,看看它的主要字段是什么。如果是 Title 字段(默认情况下),请确保在创建新项目期间将 Title 字段设置为唯一值 (GUID)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 2012-08-19
    • 2020-04-29
    • 2014-10-28
    相关资源
    最近更新 更多