Сопоставитель Sitecore Glass GetItem‹TypeName›(guid) всегда возвращает значение null

Я видел связанный с этим вопрос: Sitecore Glass Mapper всегда нулевой

Но, к сожалению, это не дает решения для моего случая.

Вот фрагмент кода:

var db = Factory.GetDatabase("master");
var context = new SitecoreContext();
// the ID of Needed item
var g = new Guid("{F21C04FE-8826-41AB-9F3C-F7BDF5B35C76}");
// just to test if it's possible to fetch item using db.GetItem
var i = db.GetItem(new ID(g), Language.Current, Sitecore.Data.Version.Latest);
// Grab item
var t = context.GetItem<Article>(g);

В приведенном выше коде: i не равно null t равно null

Статья представляет собой простой класс, например:

[SitecoreType(TemplateId = "{4C4EC1DA-EB77-4001-A7F9-E4C2F61A9BE9}")]
public class Article
{
    [SitecoreField(FieldName = "Title")]
    public string Title { get; set; }
}

В Sitecore установлен только один язык - en, он же указан в web.config в пунктах.

Также я добавил GlassMapperSc.Start(); к Application_Start в Global.asax.cs и добавил свою сборку в список включенных сборок через var attributes = new AttributeConfigurationLoader(new[] { "Assembly.Name" });, и мне удалось найти свой класс в сопоставлениях SitecoreContext.

Это не похоже на языковую проблему, как указано в ссылке, указанной в самом начале. И я уже довольно долго с этим борюсь, но безрезультатно...

Спасибо!


person Andrew Zolotukhin    schedule 02.07.2014    source источник
comment
Просто чтобы убедиться, вы проверили, что ваш элемент {F21C04FE-8826-41AB-9F3C-F7BDF5B35C76} имеет действительную версию?   -  person Kevin Brechbühl    schedule 02.07.2014
comment
Используя стандартный API Sitecore, получите элемент и убедитесь, что он написан на ожидаемом языке, а также имеет версию. Я видел проблемы, когда (и без причины) SC использует язык, отличный от того, который, по вашему мнению, должен использовать.   -  person Michael Edwards    schedule 02.07.2014
comment
@ michael-edwards Я проверил это, у него есть язык «en» и версия «1».   -  person Andrew Zolotukhin    schedule 02.07.2014
comment
Вы пытались выполнить приведение (i) напрямую с помощью i.GlassCast‹Article›(true,true) ? Также заголовок должен быть виртуальным.   -  person Ahmed Okour    schedule 02.07.2014
comment
@ahmed-okour Спасибо! i.GlassCast‹Article›(true,true) и добавление виртуального к заголовку помогло мне, но GetItem‹Article›(g) по какой-то причине по-прежнему возвращает null.   -  person Andrew Zolotukhin    schedule 02.07.2014
comment
Может быть ошибка в Glass, не уверен, однако, я все время использовал метод GlassCast(), до сих пор не было никаких проблем с ним.   -  person Ahmed Okour    schedule 02.07.2014
comment
Даже если у элемента есть версия, он может находиться в состоянии рабочего процесса, которое не является окончательным. С настройками по умолчанию Sitecore вернет для этого элемент без версии.   -  person Mark Cassidy    schedule 02.07.2014


Ответы (1)


Я только что заметил, что вы используете master db для базы данных Sitecore и SitecoreContext для Glass.

Класс SitecoreContext будет использовать базу данных, определенную свойством Sitecore.Context.Database во время выполнения. Вероятно, это означает, что он использует веб-базу данных.

Можете ли вы проверить, опубликовали ли вы элемент в веб-базе данных или вместо этого использовали:

var context = new SitecoreService("master");
person Michael Edwards    schedule 02.07.2014
comment
Спасибо Большое! Это ответ! - person Andrew Zolotukhin; 03.07.2014