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