3

SitecoreAPIコードにわずかな奇妙な点があることに気づきました。参考までにコードを以下に示します。コードは、を実行してデータベースを取得しようとしていnew Database(database)ます。しかし、ランダムに失敗していました。

このコードはしばらくの間機能しましたDatabase db = new Database(database);が、昨日ランダムに失敗し始めました。コードをに変更するDatabase db = Database.GetDatabase(database);と、コードは再び機能し始めました。2つのアプローチの違いは何ですか?Sitecoreが推奨するものは何ですか?

私はこれが2回発生するのを見てきました。本番環境で複数回、開発環境で数回です。

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 に答える