3

我们注意到 Sitecore API 代码有一点奇怪。代码如下供您参考。该代码试图通过执行来获取数据库new Database(database)。但随机它失败了。

这段代码工作了一段时间,Database db = new Database(database);但昨天开始随机失败。当我们将代码更改为 时Database db = Database.GetDatabase(database);,代码又开始工作了。这两种方法有什么区别以及 Sitecore 推荐的方法是什么?

我已经看到这种情况发生了两次——在生产环境中发生了多次,在我的开发环境中发生了几次。

public static void DeleteItem(string id, stringdatabase)
{
    //get the database
    Database db = new Database(database);
    //get the item
    item = db.GetItem(new ID(id));
    if (item != null)
    {
        using(new Sitecore.SecurityModel.SecurityDisabler())|
        {
            //delete the item
            item.Delete();
        }
    }
}
4

1 回答 1

7

您会看到人们获取特定数据库的常见方式是:

Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");

这相当于Sitecore.Data.Database.GetDatabase("master")

当您调用其中任何一个方法时,它将首先检查数据库的缓存。如果未找到,它将通过反射在配置文件中使用所有配置值构建数据库。创建数据库后,它将被放置在缓存中以备将来使用。

当您在数据库上使用构造函数时,它只是创建了一个相当空的数据库对象。当您使用这种方法时,我很惊讶听到它完全有效。

获取特定数据库的正确方法是使用:

Sitecore.Configuration.Factory.GetDatabase("master");
// or
Sitecore.Data.Database.GetDatabase("master");

如果您正在寻找与当前请求一起使用的数据库(又名上下文数据库),您可以使用Sitecore.Context.Database. 您也可以使用Sitecore.Context.ContentDatabase.

于 2012-06-21T15:11:05.797 回答