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

Gab*_*bar 3 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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Sea*_*ney 7

您将看到人们获得特定数据库的常见方法是:

Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Run Code Online (Sandbox Code Playgroud)

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

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

当您在数据库上使用构造函数时,它只是创建一个相当空的数据库对象.当你使用这种方法时,听到它正在发挥作用,我感到很惊讶.

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

Sitecore.Configuration.Factory.GetDatabase("master");
// or
Sitecore.Data.Database.GetDatabase("master");
Run Code Online (Sandbox Code Playgroud)

如果您希望将数据库与当前请求(也称为上下文数据库)一起使用,则可以使用Sitecore.Context.Database.你也可以使用Sitecore.Context.ContentDatabase.