У меня есть простое решение 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). У меня есть несколько моментов путаницы по этому поводу:
- Я вижу, что модель BCS имеет атрибуты TypeName в дескрипторах TypeDescriptors, которые описывают типы классов, которые реализуют классы сущностей, но методы Finder и SpecificFinder, по-видимому, функционируют для меня должным образом, даже если здесь приведена тарабарщина, хотя AssociationNavigator не может загрузить тип. Почему это?
- Я не вижу нигде в сгенерированном Visual Studio файле bdcm или в документах MSDN для TypeDescriptor , который указывает, где можно указать имя сборки для типов сущностей.
Итак, как я могу использовать типы объектов в моем проекте BCS, когда эти объекты определены в другой сборке?