gpt4 book ai didi

c# - 如何删除Orchard中某个内容项的版本记录?

转载 作者:行者123 更新时间:2023-11-30 17:39:28 25 4
gpt4 key购买 nike

我有一个运行的 Orchard CMS 与用户同步相关联。此同步会在一夜之间更新每个用户,代码以

... = mContentManager.Get<Orchard.Users.Models.UserPart>(lOrchardUser.ContentItem.Id,
Orchard.ContentManagement.VersionOptions.DraftRequired);

如你所见VersionOptions.DraftRequired传递给 Get()每次同步用户时创建一个新草稿的方法。此处无意创建新草稿,因此我将其更改为 VersionOptions.Published这避免了在每次调用时创建新的版本记录。

但这里的问题是传递 VersionOptions.DraftRequired过去为每个用户创建了大约 120 个版本记录,而数据库中大约有 1000 个用户。

当我现在使用 IContentManager.Query() 时由于版本数量多,需要相当长的时间。

我的想法是删除除已发布版本之外的所有版本,因为我不需要它们,但 IContentManager不提供任何版本删除选项并使用 IRepository<> 删除记录导致 NHibernate 异常。

所以我最后的办法是使用 LINQ 查询来删除版本,这确实有效,但我被告知不建议在 Orchard 中使用 LINQ。

我想知道是否有人对大量版本记录有任何问题,因为系统运行时间越长,积累的数据越多,系统越来越慢。

所以,我的问题是

  1. Orchard 有没有删除版本记录的方法?
  2. 有没有办法禁用版本控制?

最佳答案

由于 Orchard 似乎没有办法做到这一点,我删除了具有以下 LINQ 2 SQL 代码的版本:

  public System.Web.Mvc.ActionResult RemoveVersions()
{
// select user ids, an alternate way is to retrieve user IDs via content manager but this takes a veeeeery long time due
// to the need of querying all versions
//
// var lOrchardUserIDs = mContentManager
// .Query<Orchard.Users.Models.UserPart, Orchard.Users.Models.UserPartRecord>(Orchard.ContentManagement.VersionOptions.AllVersions)
// .List()
// .Select(u => u.Id)
// .ToList()
var lOrchardUserIDs = mUserRepository.Fetch(u => true).Select(u => u.Id).ToList();

foreach (var lOrchardUserID in lOrchardUserIDs)
{
var lContentItemVersionRecords =
(from r in DataContext.ContentItemVersionRecords where r.ContentItemRecord_id == lOrchardUserID select r).ToList();

if (lContentItemVersionRecords.Count > 1)
{
foreach (var lContentItemVersionRecord in lContentItemVersionRecords)
{
if (lContentItemVersionRecord.Number == 1)
{
if (lContentItemVersionRecords[lContentItemVersionRecords.Count - 1].Published)
{
lContentItemVersionRecord.Latest = true;
lContentItemVersionRecord.Published = true;
}
}
else
DataContext.ContentItemVersionRecords.DeleteOnSubmit(lContentItemVersionRecord);
}
}
}

DataContext.SubmitChanges();

return Content("Done");
}

关于c# - 如何删除Orchard中某个内容项的版本记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35486133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com