LinqToSharepoint вставить в список с несколькими типами контента - PullRequest
2 голосов
/ 09 декабря 2011

У меня проблема с добавлением новых записей в список SharePoint, который может содержать элементы более одного типа контента при использовании Linq2SharePoint.

Мой список и его типы контента создаются функцией, а в приемнике событий привязки типов контента создаются для ряда типов контента.Фактически это дерево типов, унаследованных друг от друга, которые все происходят из одного пользовательского типа контента, который сам является производным от встроенного типа контента Item.

Мой контекст данных генерируется SPMetal, а затем из этогоСлой репозитория создается с использованием пользовательских шаблонов T4.Я не использую Linq2SharePoint для доступа к именованным спискам, а скорее для создания репозиториев для типов контента.Действительно, поскольку рассматриваемый список может быть создан в любом SPWeb путем активации функции, которой он не существует во время компиляции, поэтому он неизвестен контексту данных.

В MSDN объясняется, что для обработки списков более чемодин тип контента SPMetal генерирует контекст данных, чтобы использовать ближайший базовый тип контента для списка такого рода.См. Раздел «Создание сущностей для типов контента» здесь http://msdn.microsoft.com/en-us/library/ff798478.aspx

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

Item
  Foo : Item
    BlueFoo : Foo
    RedFoo : Foo
      BrightRedFoo : RedFoo
      DarkRedFoo : RedFoo
    GreenFoo : Foo

Тогда мой список может содержать элементы любого из типов контента XXXFoo, и для доступа к нему контекст данных использует EntityList<Foo>.

Это прекрасно работает для чтения элементов из списка, хотя все они относятся к типу Foo, а не к их производным типам (хотя это не представляет реальной проблемы, поскольку при использовании некоторых jiggery требуется расширение ICustomMapping для Item, чтобы получить доступ к скрытому полю типа контента, который может генерировать созданный слой хранилищаполучить доступ к базовому SPListItem и приведения вниз к производному типу, если требуется).

Проблема возникает, когда я пытаюсь записать элемент в список.Сначала я попытался создать специальный EntityList для этой цели, например EntityList<RedFoo>, но это вызвало исключение.Затем я добавил тип Foo к типам содержимого Lists и попытался добавить элемент, используя EntityList<Foo>, но это вызывает то же исключение.

Исключение одинаково в обоих случаях, и сообщение об ошибкеMsgstr "Столбцы, связанные с отображениями, были удалены / переименованы".Поиск Google для этого находит только одного счастливого человека, который столкнулся с этим сообщением, (omourad.blogspot.com/2010/06/columns-associated-with-mappings-have.html), но его проблема неправильно называла его список.Это не моя проблема.

После нескольких часов траления в WWW я нахожу очень мало дискуссий о SPLists с несколькими типами контента и практически ничего не касающегося Linq и этой проблемы.Это есть в CodePlex http://sporm.codeplex.com/, но он имеет 0 загрузок и работает тихо с 2009 года ...

Я попытался получить доступ напрямую из контекста данных, а не с использованием уровня хранилища, чтобы убедиться, чтопроблема не в моем коде.Я восстановил контекст данных из сети с активированной функцией, чтобы я мог быть уверен, что она не синхронизирована.

Я что-то упустил?Это исправлено накопительным обновлением, которое я как-то пропустил?Конечно, я не единственный человек, который пытался это сделать?Я чувствую себя почти так же одиноко, как когда у вас есть проблема, и единственная онлайн-справка, которую вы можете найти, - это вопрос переплетения StackOverflow.Должен быть кто-то, кто может остановить этот вопрос сам по себе?

1 Ответ

0 голосов
/ 18 января 2012

[Вставьте здесь изображение паутины]

У меня нет четкого ответа на этот вопрос, так как, похоже, это не проблема, или, по крайней мере, проявление, которое я имел, было только симптомом.Или, может быть, у меня просто нет четкого ответа, поскольку в мире SharePoint нет четких ответов, где, казалось бы, вполне приемлемо говорить «Не делай Х» или «Ты должен делать Я», не имея возможности объяснить или оправдатьЭто.В этом духе я бы сказал следующие неуместно неподдерживаемые обобщения:

Не используйте атрибуты «Inherits» или «Overwrite» в ContentTypes.

Они звучат хорошо.Документы выглядят хорошо.Функциональность была бы великолепна для таких вещей, как избавление от этого утомительного поля «Название», но на самом деле они просто не работают.Я не знаю почему, и я полагаю, что и команда SharePoint не может сделать лучшее, что они могут мне дать: «Произошла ошибка.Пожалуйста, попробуйте еще раз »или что-то подобное.Что я знаю, так это то, что без этих двух атрибутов и крайне желательных эффектов, которые они дают, все работает намного лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...