Невозможно выполнить SharePoint BCS AssociationNavigator, когда мои классы сущностей находятся в другой сборке - PullRequest
1 голос
/ 29 марта 2012

У меня есть простое решение SharePoint 2010 BCS, в котором я определяю две сущности и простые родительско-дочерние отношения между ними. У меня есть классы сущностей (Parent и Child) в отдельной сборке от моих классов обслуживания (ParentService и ChildService). Похоже, что это не представляет проблемы при использовании только методов Finder и SpecificFinder, но когда я пытаюсь выполнить метод AssociationNavigator, происходит сбой. Когда мои типы сущностей находятся в той же сборке, что и определение модели BCS, и связывают классы обслуживания, AssociationNavigator работает нормально. Я звоню в AssociationNavigator так:

var entity_instance_collection = new EntityInstanceCollection(1);
entity_instance_collection.Add(parent_entity_instance);
var association = (IAssociation)parent_entity.GetMethodInstance("ParentToChildAssociationNavigator", MethodInstanceType.AssociationNavigator);
var child_items = child_entity.FindAssociated(entity_instance_collection, association, lobi);

Когда типы сущностей находятся в отдельной сборке, я получаю InvalidMetadataObjectException при попытке выполнить FindAssociated:

Невозможно загрузить Type, описанный TypeDescriptor TypeName 'BdcModelProject2.BdcModel1.Parent, BdcModel1' для параметра с именем 'parent' в методе с именем 'ReadItem' в Entity (внешний контент Тип) с именем 'Parent' в пространстве имен 'BdcModelProject2.BdcModel1'.

с этим InnerException:

Не удалось загрузить тип 'BdcModelProject2.BdcModel1.Parent' из сборки 'BdcModelProject2, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = 50bc5a1f7318bdeb».

Итак, похоже, что мое приложение просто пытается загрузить типы моих сущностей из сборки, в которой определена модель BCS (BdcModelProject2), а не из сборки, где мои сущности фактически определены (ClassLibrary1). У меня есть несколько моментов путаницы по этому поводу:

  1. Я вижу, что модель BCS имеет атрибуты TypeName в дескрипторах TypeDescriptors, которые описывают типы классов, которые реализуют классы сущностей, но методы Finder и SpecificFinder, по-видимому, функционируют для меня должным образом, даже если здесь приведена тарабарщина, хотя AssociationNavigator не может загрузить тип. Почему это?
  2. Я не вижу нигде в сгенерированном Visual Studio файле bdcm или в документах MSDN для TypeDescriptor , который указывает, где можно указать имя сборки для типов сущностей.

Итак, как я могу использовать типы объектов в моем проекте BCS, когда эти объекты определены в другой сборке?

1 Ответ

0 голосов
/ 16 апреля 2012

Здесь есть две возможности:

  • Не находит dll
  • Он находит старую версию dll, которая не содержит новый код, который вы используете

У нас часто возникала проблема, связанная со старой версией в GAC.Когда новая версия установлена ​​в каталоге bin, она просто игнорирует ее и продолжает использовать версию в GAC.Затем вы удаляете версию в GAC, но она по-прежнему не работает, поскольку она кэшировала старую версию.Наконец, сброс IIS или перезагрузка компьютера приводит к его работе.

Краткий ответ: Попробуйте найти старую версию библиотеки DLL на компьютере.

Редактировать

Для отслеживания проблемы можно использовать такой инструмент, как Просмотр журнала привязки сборки .

см. http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.90).aspx

...