Database 通过Sitecore API获取数据库时出现问题

Database 通过Sitecore API获取数据库时出现问题,database,api,sitecore,Database,Api,Sitecore,我们注意到Sitecore API代码中有一点奇怪。下面的代码供您参考。代码试图通过执行新建数据库(数据库)来获取数据库。但随机地,它失败了 这段代码在Database db=新数据库(Database)中运行了一段时间但昨天开始随机失败。当我们将代码更改为Database db=Database.GetDatabase(Database)时,代码再次开始工作。这两种方法之间的区别是什么?Sitecore推荐什么 我已经看到这种情况发生过两次了——在生产环境中多次出现,在我的开发环境中也出现过几

我们注意到Sitecore API代码中有一点奇怪。下面的代码供您参考。代码试图通过执行
新建数据库(数据库)
来获取数据库。但随机地,它失败了

这段代码在
Database db=新数据库(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();
        }
    }
}

人们获取特定数据库的一种常见方式是:

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

你的回答很有道理。回顾Sitecore日志,错误通常是随机发生的,但并不经常发生。据我所知,随着越来越多的用户开始使用Sitecore(至少10-15个),频率在过去一两天内增加了。我的应用程序基本上是从一个简化的表单在Sitecore中创建项目,供那些不需要进入Sitecore的用户使用。