У меня проблема с добавлением новых записей в список 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.Должен быть кто-то, кто может остановить этот вопрос сам по себе?