通过Sitecore API获取数据库的问题

时间:2012-06-21 14:59:40

标签: database api sitecore

我们注意到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();
        }
    }
}

1 个答案:

答案 0 :(得分: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